Question

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.

Was it helpful?

Solution

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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top