Reputation: 49590
I want to implement a "poor's man" toggle button for a menu item. Essentially, when it's checked it should say "Metric" and when it's unchecked - "Imperial". I can't get it to work.
Here's what I tried:
<MenuItem IsCheckable="True" IsChecked="True">
<Style>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Header" Value="Metric"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Header" Value="Imperial"/>
</Trigger>
</Style.Triggers>
</Style>
</MenuItem>
It gives me an error
The member 'IsChecked' is not recognized or is not accssible" (same for Header).
The error goes away when I do <Style TargetType="{x:Type MenuItem}">
, but it doesn't do anything.
I tried directly without the <Style>
<MenuItem.Triggers>
<Trigger...>
</MenuItem.Triggers>
First, it gave me the same error as above, but when I changed the property to Property="MenuItem.IsChecked"
it started notifying me that only EventTriggers are allowed.
I subsequently tried with a DataTrigger
without effect :
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}, Path=IsChecked}" Value="True">
<Setter Property="Header" Value="Metric"/>
</DataTrigger>
No effect.
Upvotes: 3
Views: 1632
Reputation: 128013
You have to assign the MenuItem's Style
property by declaring the <Style>
as child element of a <MenuItem.Style>
element.
<MenuItem IsCheckable="True" IsChecked="True">
<MenuItem.Style>
<Style TargetType="MenuItem">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Header" Value="Metric"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Header" Value="Imperial"/>
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
Upvotes: 3