3

我想为菜单项实现一个“穷人”切换按钮。本质上,当它被选中时,它应该说“公制”,而当它未被选中时 - “英制”。我无法让它工作。

这是我尝试过的:

<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>

它给了我一个错误

成员 'IsChecked' 无法识别或无法访问”(与 Header 相同)。

当我这样做时,错误消失了<Style TargetType="{x:Type MenuItem}">,但它什么也没做。

我直接试过没有<Style>

<MenuItem.Triggers>
   <Trigger...>
</MenuItem.Triggers>

首先,它给了我与上面相同的错误,但是当我将属性更改为它时,Property="MenuItem.IsChecked"它开始通知我只允许使用 EventTriggers。

我随后尝试了DataTrigger没有效果:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}, Path=IsChecked}" Value="True">
    <Setter Property="Header" Value="Metric"/>
</DataTrigger>

没有效果。

4

1 回答 1

3

Style您必须通过将元素声明<Style>为子元素来分配 MenuItem 的属性<MenuItem.Style>

<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>
于 2013-07-15T06:10:51.780 回答