IsChecked的触发器不触发

时间:2011-10-30 17:14:03

标签: wpf data-binding triggers

我想更改ToggleButton的图标(内容Fluent RibbonBar),具体取决于它的IsChecked属性。现在我写了以下样式片段:

<Fluent:ToggleButton.Style>
    <Style BasedOn="{StaticResource RibbonButtonStyle}" TargetType="{x:Type Fluent:ToggleButton}">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Fluent:ToggleButton}}, Path=IsChecked}" Value="False">
                <Setter Property="Icon" Value="{StaticResource ResourceKey=Style.Images.Pined}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Fluent:ToggleButton}}, Path=IsChecked}" Value="True">
                <Setter Property="Icon" Value="{StaticResource ResourceKey=Style.Images.Unpined}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Fluent:ToggleButton.Style>

问题是Trigger没有很好地加载Image。问题不是,IsChecked没有实现自己,我已经测试了这个。而且我也没有在其他任何地方设置icon属性。如果我在其他地方使用它们,图像资源也可以正常工作。

Rebuild的信息:我将ToggleButton作为放置在BackstageTabItem中的RibbonListBox的DataTemplate放入Backstage。

2 个答案:

答案 0 :(得分:1)

由于这是togglebutton的一种风格,你不需要一个findancestor绑定 - 你会使用self。实际上,由于IsChecked是DP,您可以使用触发器 - 例如<Trigger Property="IsChecked" Value="False">

答案 1 :(得分:0)

绝对需要从控件声明中删除Icon属性,因为它会覆盖样式由于precedence而尝试执行的所有操作。

但是那些DataTriggers将不起作用,绑定将寻找一个祖先,本身被排除,因此您必须更改它们以及AndrewS已经指出的。只有满足这两个条件,您才有可能实现这一目标(尽管可能会有额外的干扰)。