2011-10-30 142 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