dado que está utilizando Blend, debe aprovechar el soporte de Mezcla para el VisualStateManager
. Todo lo que tiene que hacer es describir cómo se ve el objeto en sus diversos estados, como MouseOver
y Normal
y cuánto tiempo son las transiciones entre varios estados, y el administrador de estado visual describe cómo hacer la transición entre estados.
Una imagen no tiene ningún estado visual pero puede editar una plantilla Button
y hacer que su contenido sea una imagen y luego editar los estados para el botón. He hecho esto y limpiado el XAML para demostrar la técnica:
<Grid>
<Grid.Resources>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Image x:Name="image" Height="100" Width="Auto" Source="http://thecybershadow.net/misc/stackoverflow.png" Margin="0,0,-25,0">
<Image.Effect>
<DropShadowEffect ShadowDepth="0"/>
</Image.Effect>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.ShadowDepth)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="15"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed"/>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Image>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Button Style="{StaticResource ButtonStyle1}"/>
</Grid>
Tenga en cuenta que Blend hace todo esto para usted, pero la comprensión de la XAML ayudaré. He aquí una orientada Blend-tutorial:
No consumo Expression Blend, pero tal vez usted quiere trabajar en el XAML directamente? Para invertir un guión gráfico por otro evento, la forma más sencilla es crear un guión gráfico nuevo haciendo la animación en orden inverso y etiquetarlo para ese evento –
. Estaba pensando en hacerlo, pero estaba tratando de evitar la creación de otro guión gráfico. Gracias por el aporte. –
Hasta ahora, si un solo evento desencadena "do-and-reverse", se puede realizar fácilmente, pero para su caso, se trata de 2 eventos separados. Estará interesado en saber de una manera conveniente a través de xaml solo. –