【问题标题】:Style triggers produce no effect样式触发器不产生任何效果
【发布时间】:2013-07-12 22:16:02
【问题描述】:

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

这是我尝试过的:

<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' 无法识别或无法访问”(同 用于标题)。

当我执行&lt;Style TargetType="{x:Type MenuItem}"&gt; 时,错误消失了,但它什么也没做。

我直接尝试不带&lt;Style&gt;

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

没有效果。

【问题讨论】:

    标签: wpf xaml binding datatrigger


    【解决方案1】:

    您必须通过将&lt;Style&gt; 声明为&lt;MenuItem.Style&gt; 元素的子元素来分配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>
    

    【讨论】:

    • 天哪...我以为我尝试了所有组合。它起作用了-谢谢。 @Clemens,你能解释一下为什么没有&lt;MenuItem.Style&gt; 是不正确的吗?
    • 因为你没有分配Style 属性,而只是向Items 集合添加一些东西,这不是另一个MenuItem,因此被忽略。
    • @NewDev 在这种情况下 MenuItem.IsChecked 当只有 2 个可能的值,而不是有 2 个单独的 Trigger 时,只需选择一个值作为 Style 的默认值setter 并且只有 1 个触发器来切换该值。
    猜你喜欢
    • 2012-05-04
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2020-04-23
    • 2010-10-15
    相关资源
    最近更新 更多