2012-05-15 79 views
0

我有一個按鈕可視狀態管理器內的故事板奇怪的問題。我有兩個相同風格的按鈕和一個特定的ForegroundPath即按鈕的內容將其Fill屬性綁定到此前景。VisualState故事板適用於資源而不是控件?

<Button Style="{DynamicResource ButtonStyleListNavigation}" 
     Foreground="{DynamicResource NavigationButtonForegroundBrush}"> 
    <Button.Content> 
    <Path Data="{StaticResource LeftArrowPath}" 
      Fill="{Binding RelativeSource= 
         {RelativeSource Mode=FindAncestor, AncestorType=Button}, 
         Path=Foreground}" /> 
    </Button.Content> 
</Button> 

<Button Style="{DynamicResource ButtonStyleListNavigation}" 
     Foreground="{DynamicResource NavigationButtonForegroundBrush}"> 
    <Button.Content> 
    <Path Data="{StaticResource RightArrowPath}" 
      Fill="{Binding RelativeSource= 
         {RelativeSource Mode=FindAncestor, AncestorType=Button}, 
         Path=Foreground}" /> 
    </Button.Content> 
</Button> 

在正常狀態的按鈕看起來是這樣的:

Buttons normal

風格ButtonStyleListNavigation如下:

<Style x:Key="ButtonStyleListNavigation" TargetType="Button"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
     <Border> 
      <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal"/> 
       <VisualState x:Name="MouseOver"> 
       <Storyboard> 
        <ColorAnimationUsingKeyFrames 
          Storyboard.TargetProperty= 
           "(Control.Foreground).(SolidColorBrush.Color)"> 
        <EasingColorKeyFrame KeyTime="0" Value="Chocolate" /> 
        </ColorAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Pressed" /> 
       <VisualState x:Name="Disabled" /> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 

      <ContentPresenter x:Name="contentPresenter" /> 
     </Border> 
     </ControlTemplate> 
    </Setter> 
</Style> 

因此,當用戶鼠標懸停一個按鈕,它的顏色應該改變,非常簡單。

Buttons mouseover

兩個按鈕改變它們的顏色:但是,什麼,當我將鼠標放置一個按鈕出現這種情況。我顯然做錯了什麼,但我無法弄清楚它是什麼。

回答

3

您正在將兩個按鈕的Foreground屬性設置爲相同的SolidColorBrush實例(如資源NavigationButtonForegroundBrush所示)。然後在ColorAnimation中,通過表達式(Control.Foreground).(SolidColorBrush.Color)更改該SolidColorBrush的Color屬性。顯然,現在這兩個按鈕的Foreground都已更改。

您可以通過不使用畫筆作爲資源,而只是使用其顏色來防止此問題。所以按鈕應改爲:

<Button Style="{DynamicResource ButtonStyleListNavigation}"> 
    <Button.Foreground> 
    <SolidColorBrush Color="{DynamicResource NavigationButtonForegroundColor}" /> 
    </Button.Foreground> 
    <Button.Content> 
    <Path Data="{StaticResource LeftArrowPath}" 
      Fill="{Binding RelativeSource= 
         {RelativeSource Mode=FindAncestor, AncestorType=Button}, 
         Path=Foreground}" /> 
    </Button.Content> 
</Button> 
+0

啊,這是有道理的。所以我必須改變整個畫筆而不是畫筆的顏色? –

+0

或者我可以停止使用'Brush'資源。 –

+0

剛剛看到您的編輯,這正是我現在要發佈的內容。畢竟似乎是正確的做法。 – Clemens