Silverlight 4 - Comment puis-je changer la couleur de fond de bouton lorsque porté avec un style de bouton Implicite?
-
27-09-2019 - |
Question
Je vais avoir beaucoup de difficulté à essayer de réaliser quelque chose qui devrait être trivial. J'utilise un style de bouton implicite défini dans un fichier global des ressources XAML. Je veux juste changer la couleur de fond de la bouton concentré au rouge avec un ColorAnimation. J'ai essayé un certain nombre de différentes combinaisons dans Storyboard.TargetProperty
et Storyboard.TargetName
et rien n'a fonctionné. Comment puis-je y parvenir?
Merci à l'avance.
<Style TargetType="Button" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused" >
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="Button" From="Green" To="Red" Duration="00:00:01" />
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
...
La solution
Depuis que je n'ai pas le reste de votre style Je l'ai fait avec deux frontières et un ContentPresenter. Cet anime l'arrière-plan du bouton du vert au rouge une fois concentré.
<Style TargetType="Button" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<ColorAnimation Storyboard.TargetName="border"
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
From="Green"
To="Red"
Duration="0:0:1" />
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border BorderBrush="Transparent" BorderThickness="1" CornerRadius="4">
<Border x:Name="border" Background="White" BorderBrush="Black" BorderThickness="1" CornerRadius="4">
</Border>
</Border>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Autres conseils
Quelques bonnes réponses ici:
style du MouseOver sur un bouton Silverlight / WPF http://forums.silverlight.net/forums/p/186402/427878. aspx