Pregunta

Tengo un control de usuario que cuando hago doble clic en él, quiero que se acerque, si aún no lo está. Si es así, entonces el doble clic lo alejará. Puedo hacer que funcione con código detrás, pero no puedo hacerlo funcionar en xaml. Aquí está el código detrás de ese identificador es el evento de doble clic.

void MyObjectMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (IsZoomedIn)
        {
            IsZoomedIn = false;
            //ZoomOutAnimation();
        }
        else
        {
            IsZoomedIn = true;
            //ZoomInAnimation();
        }
    }

luego en mi xaml:

<UserControl.RenderTransform>
    <TransformGroup>
        <RotateTransform />
        <ScaleTransform />
        <TranslateTransform />
    </TransformGroup>
</UserControl.RenderTransform>

<UserControl.Style>
    <Style>
        <Style.Triggers>
            <Trigger Property="local:MyObject.IsZoomedIn" Value="False">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="(UserControl.
                            RenderTransform).(TransformGroup.Children)[1].
                            (ScaleTransform.ScaleX)" To="1" Duration="0:0:.3" />
                            <DoubleAnimation Storyboard.TargetProperty="(UserControl.
                            RenderTransform).(TransformGroup.Children)[1].
                            (ScaleTransform.ScaleY)" To="1" Duration="0:0:.3" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
            <Trigger Property="local:MyObject.IsZoomedIn" Value="True">
                <Trigger.EnterActions>        
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="(UserControl.
                        RenderTransform).(TransformGroup.Children)[1].
                        (ScaleTransform.ScaleX)" To="2" Duration="0:0:.3" />
                        <DoubleAnimation Storyboard.TargetProperty="(UserControl.
                        RenderTransform).(TransformGroup.Children)[1].
                        (ScaleTransform.ScaleY)" To="2" Duration="0:0:.3" />
                    </Storyboard>
                </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Style>

Una vez que se acerca a mi control de usuario, la animación de alejamiento no funciona. Cualquier ayuda apreciada.
Gracias.

¿Fue útil?

Solución

Sus animaciones mantienen los valores y, por lo tanto, la segunda animación no aparece a pesar de que se dispara el gatillo. En lugar de tener dos disparadores separados, puede usar Trigger.ExitActions como si estuviera usando EnterActions.

<Trigger Property="IsZoomedIn"
         Value="True">
    <Trigger.EnterActions>
        <BeginStoryboard>
            <Storyboard >
                <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"     
                                 To="2"
                                 Duration="0:0:.3" />
                <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
                                 To="2"
                                 Duration="0:0:.3" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>
    <Trigger.ExitActions>
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
                                 To="1"
                                 Duration="0:0:.3" />
                <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
                                 To="1"
                                 Duration="0:0:.3" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.ExitActions>
</Trigger>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top