2016-08-01 196 views
0

我希望所有按鈕在單擊時閃爍5秒鐘。WPF,如何使按鈕背景在點擊後閃爍,使用xaml

  • 我試着通過適用於所有的按鈕(做我需要參考的樣式,當我宣佈按鈕在XAML或不樣式自動適用於所有的按鈕?)

  • 風格做

    我可以使Foreground改變顏色,但我想要的是按鈕文本背後的背景改變顏色,而不是文本本身。

  • 我目前有一個ColorAnimation但我希望按鈕背景閃爍兩種顏色之間交替,我不希望顯示整個色譜。

到目前爲止我有以下代碼。有人可以幫助我在正確的方向嗎?

編輯

如果動畫按鈕背景是強硬的動畫,然後我可以很容易地與前景動畫定居。

<Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Click"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <Storyboard BeginTime="00:00:00" 
           RepeatBehavior="Forever" 
           Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"> 
          <ColorAnimation From="Black" To="Red" Duration="0:0:5"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </Style.Triggers> 
    </Style> 

回答

4

1.是樣式被應用到所有的按鈕

2.Animate backgrouund Storyboard.TargetProperty = 「(Button.Background)。(SolidColorBrush.Color)」。確保您的動畫風格不會被默認樣式覆蓋。 參考stackoverflow

3.可能同時運行2個不透明動畫。一位來自TRANSPARANT黑色和紅色,從其他打算在同一time.This到TRANSPARANT只是一個想法,沒有嘗試... 1.列出項目

編輯

我試着這段代碼和它的工作。關鍵是要禁用默認樣式寬度OverridesDefaultStyle =「假」

<Window.Resources> 
<Style TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="Blue"></Setter> 
    <Style.Triggers> 
     <EventTrigger RoutedEvent="Click"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
         <Storyboard BeginTime="00:00:00" 
         RepeatBehavior="Forever" 
            AutoReverse="True" 
         Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"> 
          <ColorAnimation From="Black" To="Red" Duration="0:0:1"/> 
         </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
    </Style.Triggers> 
</Style> 

</Window.Resources> 
<Button Width="100" Height="35" OverridesDefaultStyle="False" Focusable="False">dfdfdf</Button> 

編輯

另外補充調焦=「假」,以顯示黑紅色。按照你喜歡的方式改變時間。

+0

什麼也沒有發生。這是我的coloranimation:''。但它沒有任何影響。 –

2

您可以嘗試以下操作。我不認爲這是很漂亮,但不褪色的顏色相匹配的要求:

<Style TargetType="{x:Type Button}"> 
      <Style.Resources> 
       <Storyboard x:Key="Storyboard" Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"> 
        <ColorAnimationUsingKeyFrames Duration="0:0:5" > 
         <DiscreteColorKeyFrame KeyTime="0:0:1" Value="Black"></DiscreteColorKeyFrame> 
         <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Red"></DiscreteColorKeyFrame> 
         <DiscreteColorKeyFrame KeyTime="0:0:3" Value="Black"></DiscreteColorKeyFrame> 
         <DiscreteColorKeyFrame KeyTime="0:0:4" Value="Red"></DiscreteColorKeyFrame> 
         <DiscreteColorKeyFrame KeyTime="0:0:5" Value="Black"></DiscreteColorKeyFrame> 
        </ColorAnimationUsingKeyFrames> 
       </Storyboard> 
      </Style.Resources> 
      <Style.Triggers> 
       <EventTrigger RoutedEvent="Click"> 
        <EventTrigger.Actions> 
         <BeginStoryboard Name="flash" Storyboard="{StaticResource Storyboard}"/> 
        </EventTrigger.Actions> 
       </EventTrigger> 
      </Style.Triggers> 
     </Style> 

只是改變DiscreteColorKeyFrame的顏色作爲你需要他們

+0

正如對另一個答案的評論所指出的那樣,即使我明確指定了按鈕的背景顏色,「Background」也不會改變我的按鈕背景的顏色。這似乎是許多人遇到的問題。雖然這是一個粗略的解決方案,但您對動畫作品(帶有'Foreground')的想法。最後我決定使用'DoubleAninmation'來定位'不透明度'。 –

+0

你是否在某處設置了按鈕的初始背景?你的行爲聽起來就像這樣。 – lokusking

+0

我不這樣做,但它可能是一個包含樹上的按鈕的控件可能會設置它。很難說,因爲我使用第三方庫(DevExpress),我在DevExpress控件中託管按鈕。 –

-1

我似乎有一般問題,改變背景顏色一個按鈕,這似乎是一個廣泛分享的問題。相反,我想出了以下解決方案,它也適用。它的目標是Opacity,通過DoubleAnimation,非常靈活。

<Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Button.Click"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.4" RepeatBehavior="30x"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </Style.Triggers> 
    </Style>