2016-07-11 14 views
0

Ich versuche, den Hintergrund einer Schaltfläche zu ändern, aber das Problem ist, dass es drei Zustände hat - IsEnabled, IsPressed und Clicked. Im Standardzustand, wenn ich den Knopf drücke, ändert sich der Hintergrund und wenn ich auf den Knopf klicke, wird der Knopf animiert, aber wenn ich das nächste Mal drücke, ändert sich der Hintergrund nicht, aber der Click (Animation) funktioniert korrekt, da es a Konflikt über die Änderung der ähnlichen Ressource.Wie kann ich bei Verwendung von Triggern Eigenschaftskonflikte in WPF beheben?

Hier ist meine Quellcode

<Style TargetType="{x:Type Button}" x:Key="myButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border Name="myBorder" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
         <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Name="Stack" Background="DarkGray"> 
          <Image x:Name="checkBoxImage" Width="40" Height="40" Source="NextPage.png"/> 
         </StackPanel> 
       </Border> 
       <ControlTemplate.Triggers> 
        <EventTrigger RoutedEvent="Click"> 
         <BeginStoryboard> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Stack" Storyboard.TargetProperty="Background"> 
            <ObjectAnimationUsingKeyFrames.KeyFrames> 
             <DiscreteObjectKeyFrame Value="Blue1" KeyTime="0" /> 
             <DiscreteObjectKeyFrame Value="DarkGray1" KeyTime="0:0:0.4" /> 
            </ObjectAnimationUsingKeyFrames.KeyFrames> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter TargetName="Stack" Property="Background" Value="Red" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Antwort

1

Das sieht wie ein Vorrang Problem. Animationen haben Vorrang vor Trigger-Set-Werten. Sie könnten entweder den Auslöser Ihres Triggers durch Animationen ersetzen, die zu Enter/ExitActions hinzugefügt wurden, oder versuchen, visual states zu verwenden und Übergänge auf diese Weise zu verwalten (was wahrscheinlich besser funktioniert, weil Sie nicht wirklich wissen, was die ExitAction in allen Fällen animieren sollte).