【问题标题】:Trigger Animations触发动画
【发布时间】:2010-11-06 12:01:17
【问题描述】:

我有一个用户控件,当我双击它时,我希望它放大,如果还没有的话。如果是,则双击将缩小它。我可以让它与后面的代码一起工作,但我不能让它在 xaml 中工作。 这是该句柄背后的代码,即双击事件。

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

然后在我的 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>

一旦放大我的用户控件,缩小动画就不起作用。任何帮助表示赞赏。
谢谢。

【问题讨论】:

    标签: wpf xaml animation triggers storyboard


    【解决方案1】:

    您的动画保存了这些值,因此即使触发器正在触发,第二个动画也不会出现。您可以像使用 EnterActions 一样使用 Trigger.ExitActions,而不是使用两个单独的触发器。

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

    【讨论】:

    • 谢谢!但我仍然不太明白为什么你的代码有效。我知道这样想可能不“正确”,但这是因为 EnterActions 更像“如果为真”而 ExitActions 更像是“否则”吗?
      谢谢。
    • EnterActions 和 ExitActions 更类似于 Initialize 和 Dispose 然后 if/else。 似乎由于触发器的顺序而发生,由于某种原因,它们无法相互“切换”,并且故事板将在 UI 中强制它们的值,因为它们具有更高的优先级之一.我没有足够普遍地使用故事板来明确评论它为什么不起作用,但是将它移动到单个触发器,或者在退出操作中明确停止每个故事板可以修复它。 msdn.microsoft.com/en-us/library/ms743230.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多