2010-11-21 66 views
1

我正在創建一個帶簡單折線的按鈕,當按鈕被禁用時(btnUp.IsEnabled = false),我想更改顏色。WPF觸發器和綁定問題

我嘗試這樣做:

<RepeatButton x:Name="btnUp" Foreground="Green"> 
    <RepeatButton.Style> 
    <Style TargetType="{x:Type RepeatButton}"> 
     <Setter Property="Content"> 
     <Setter.Value> 
      <Polyline x:Name="arrowUp" Points="0,2 3,0 6,2" Stroke="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton}, Path=Foreground, Mode=TwoWay}" StrokeThickness="2"/> 
     </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="#FFFFFFFF"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </RepeatButton.Style> 
</RepeatButton> 

但折線仍然具有相同的(綠)色當按鈕被禁用。儘管由於button.foreground和polyline.stroke之間的數據綁定,我確實希望它是白色的。

但是,如果我改變觸發這個它的工作原理(鍵摺疊):

<Trigger Property="IsEnabled" Value="False"> 
    <Setter Property="Visibility" Value="Collapsed"/> 
</Trigger> 

回答

1

我發現我自己的答案。 我把Foreground="Green"移到了<Style>裏面的一個單獨的setter,<Setter Property="Foreground" Value="#FF383838"/>,然後它就起作用了。 我不知道爲什麼。

下面是完整的解決方案:

<RepeatButton x:Name="btnUp"> 
    <RepeatButton.Style> 
    <Style TargetType="{x:Type RepeatButton}"> 
     <Setter Property="Foreground" Value="Green"/> 
     <Setter Property="Content"> 
     <Setter.Value> 
      <Polyline x:Name="arrowUp" Points="0,2 3,0 6,2" Stroke="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton}, Path=Foreground, Mode=TwoWay}" StrokeThickness="2"/> 
     </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="#FFFFFFFF"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </RepeatButton.Style> 
</RepeatButton> 
+0

明確的屬性值是優先級高於觸發值,這是優先級高於樣式值 - 讓你的解決方法是完全正確的。有關更多背景信息,請閱讀「依賴屬性設置優先級列表」部分:http://msdn.microsoft.com/zh-cn/library/ms743230.aspx – 2010-11-22 01:25:35