样式触发器不起作用

时间:2013-07-15 05:58:21

标签: wpf xaml binding datatrigger

每次我认为我终于得到 WPF/XAML这样一些不直观的东西出现了(咆哮)......

我想为菜单项实现“穷人”切换按钮。基本上,当它被检查时,它应该说“公制”,当它未被检查时 - “帝国”。我认为XAML应该相当简单,但我无法让它发挥作用。

这是我试过的:

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

没效果。

帮助......请...

1 个答案:

答案 0 :(得分: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>