2016-08-01 58 views
0

Ich möchte alle Tasten für 5 Sekunden blinken, wenn sie geklickt werden.WPF, wie man Knopf Hintergrund blinkt beim Klicken, mit Xaml

  • Ich versuche es über einen Stil zu tun, die auf alle Tasten gilt (benötige ich, um den Stil zu beziehen, wenn ich Tasten in XAML deklarieren oder nicht der Stil automatisch auf alle Tasten anwenden?)

  • Ich kann die Foreground Farbe ändern, aber was ich will ist, dass der Hintergrund hinter dem Text der Schaltfläche Farbe nicht den Text selbst ändert.

  • Ich habe derzeit eine ColorAnimation, aber ich möchte, dass der Hintergrund der Schaltfläche blinkt, indem Sie zwischen zwei Farben wechseln, ich möchte nicht, dass das gesamte Farbspektrum angezeigt wird.

Ich habe den folgenden Code bisher. Kann mir bitte jemand in die richtige Richtung helfen?

bearbeiten

Wenn die Schaltfläche Hintergrund Animieren ist härter dann zu animieren ich mit der Vordergrund Animation leicht absetzen kann.

<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> 

Antwort

4

1.Ja der Stil auf alle Tasten angewendet wird

2.Animate backgrouund Storyboard.TargetProperty = "(Button.Background). (SolidColorBrush.Color)". Stellen Sie sicher, dass Ihr Animationsstil nicht durch die Standardstile überschrieben wird. ref stackoverflow

3. Sie können 2 Opazitätsanimationen gleichzeitig ausführen. Einer von transparant zu schwarz zu gehen und die andere von Rot an dem gleichen time.This transparant ist nur eine Idee, dauerte es nicht versuchen ... 1. Liste Artikel

EDIT

Ich habe versucht, dieser Code und es hat funktioniert. Der Schlüssel ist die Standardstilbreite Overridesdefault = „False“

<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> 

EDIT

auch hinzufügen Fokussierbare = „False“ zu zeigen, die schwarz auf rote Farbe zu deaktivieren. Ändern Sie die Zeiten so, wie Sie es möchten.

+0

Nichts passiert.Dies ist meine Farbanimation: ''. Aber es hat keine Wirkung. –

2

Sie könnten Folgendes versuchen. Ich glaube nicht, dass dies sehr hübsch, aber entsprechen Ihre Anforderung, ohne die Farben zu verblassen:

<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> 

einfach die Farben als Ihre Notwendigkeit in DiscreteColorKeyFrame ändern sie

+0

Wie in einem Kommentar zu einer anderen Antwort angegeben, ändert "Hintergrund" die Farbe meines Schaltflächenhintergrunds nicht, auch wenn ich explizit die Hintergrundfarbe einer Schaltfläche festlege. Dies scheint ein Problem zu sein, das viele erleben. Die Idee, die Sie in Bezug auf die Animation hatten, funktioniert (mit 'Foreground'), obwohl es eine grobe Lösung ist. Am Ende entschied ich mich, eine 'DoubleAnminmation' zu verwenden, die auf 'Opacity' abzielt. –

+0

Legen Sie den anfänglichen Hintergrund der Schaltfläche irgendwo fest? Ihr Verhalten klingt genau so. – lokusking

+0

Ich weiß nicht, aber es kann sein, dass ein Steuerelement, das den Knopf höher in der Struktur enthält, es einstellen kann. Es ist schwer zu sagen, wie ich eine Drittanbieter-Bibliothek (DevExpress) verwende, wo ich die Schaltfläche in einem DevExpress-Steuerelement hosten. –

-1

ich scheinen Probleme im Allgemeinen zu haben, die Hintergrundfarbe zu ändern von einem Knopf, und das scheint ein weit verbreitetes Thema zu sein. Ich habe stattdessen die folgende Lösung gefunden, die auch funktioniert. Es zielt auf Opacity über DoubleAnimation und ist ziemlich flexibel.

<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>