2011-10-30 144 views
0

我想更改ToggleButton的图标(内容为Fluent RibbonBar),具体取决于它的IsChecked属性。现在我写了以下样式片段: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放入Backstage作为放置在BackstageTabItem中的RibbonListBox的DataTemplate。

+0

你不是直接在别处设置Icon属性?在这种情况下,'Setter's不起作用。 – lbergnehr

+0

只能直接在ToggleButton声明中...我会试用。 – CShark

+0

从Element声明中删除“Icon =”不起作用 – CShark

回答

0

绝对需要从控件声明删除Icon财产,因为它会压倒一切的样式尝试这样做,由于precedence

但是这些DataTriggers将不起作用,绑定会寻找祖先,本身排除,所以你必须改变它们,以及由安德鲁斯已经指出。只有在满足这两个条件的情况下,你才有可能得到这个工作(尽管可能会有更多的干扰)。

+0

谢谢,完成这两项更改后, – CShark

1

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

+0

我尝试了使用Triggers的解决方案,但没有发生任何事情...... – CShark