我想改变一个ToggleButton的图标(内容流畅的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>
问题是触发器不能很好地加载图像。问题不是,IsChecked没有实现它自己,我已经测试过了。我也没有在其他地方设置图标属性。如果我在其他地方使用图像资源,它们也可以正常工作。
信息重建:我已经把ToggleButton到后台作为一个RibbonListBox的DataTemplate放置在BackstageTabItem.
由于这是togglebutton的样式,因此不需要findancestor绑定-您将使用self。实际上,由于IsChecked
是DP你可以使用触发器-例如<Trigger Property="IsChecked" Value="False">
您绝对需要从控件声明中删除Icon
属性,因为它将覆盖由于优先级而尝试做的所有样式。
但是那些DataTriggers
将不起作用,绑定将寻找一个祖先,本身排除,所以你必须改变它们以及已经由AndrewS指出。只有满足这两个条件,你才有机会让它工作(甚至可能有额外的干扰)。