我想更改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。
答案 0 :(得分:1)
由于这是togglebutton的一种风格,你不需要一个findancestor绑定 - 你会使用self。实际上,由于IsChecked
是DP,您可以使用触发器 - 例如<Trigger Property="IsChecked" Value="False">
答案 1 :(得分:0)
您绝对需要从控件声明中删除Icon
属性,因为它会覆盖样式由于precedence而尝试执行的所有操作。
但是那些DataTriggers
将不起作用,绑定将寻找一个祖先,本身被排除,因此您必须更改它们以及AndrewS已经指出的。只有满足这两个条件,您才有可能实现这一目标(尽管可能会有额外的干扰)。