风格触发器没有任何效果

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>而不是<Style TargetType="{x:Type MenuItem}">

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

没有效果。
1个回答

3
您需要通过将<Style>作为<MenuItem.Style>元素的子元素来声明MenuItemStyle属性。
<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>

天啊...我以为我尝试了每一种组合。它奏效了 - 谢谢。@Clemens,你能解释一下为什么没有<MenuItem.Style>就不正确吗? - New Dev
2
因为你没有分配“Style”属性,而只是向“Items”集合中添加了不是另一个MenuItem的内容,因此被忽略了。 - Clemens
@NewDev 在这种情况下,MenuItem.IsChecked 当只有两个可能的值时,而不是有两个单独的Trigger,只需选择一个您的值作为Style的默认设置器,并且只有一个触发器来切换该值。 - Viv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接