WPF动画-如果运行第二个动画,则只能为一个属性设置动画

pbgvytdp  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(209)

我需要动画窗口大小显示3个不同的意见。但我已经撞上了一个只有2个视图的街区。因此,我运行1个动画来增加按钮单击时的宽度和高度,然后我想将高度和宽度设置为不同的值,但只有宽度被设置为动画,高度保持增加。我尝试了不同的方法来“停止”第一个动画,但它没有帮助。
所需的行为是用动画操作窗口大小-小->中->大->小…但仍然让用户能够在大模式下调整窗口的高度和宽度,而小模式是固定大小,中等模式只能调整高度。
几乎不是一个火箭科学的任务,但它不工作。
XAML:

<Window.Resources>
        <Storyboard x:Key="Storyboard1">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="window" Storyboard.TargetProperty="(FrameworkElement.Width)">
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="450"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="window" Storyboard.TargetProperty="(FrameworkElement.Height)">
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="800"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Key="Storyboard2">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="window" Storyboard.TargetProperty="(FrameworkElement.Width)">
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="80"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="window" Storyboard.TargetProperty="(FrameworkElement.Height)">
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="400"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>

C#

Storyboard sb1, sb2;
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            sb1 = FindResource("Storyboard1") as Storyboard;
            sb1.Begin(this, true);
        }

        private void Button1_Click(object sender, RoutedEventArgs e)
        {
            sb1.Stop();

            sb2 = FindResource("Storyboard2") as Storyboard;
            sb2.Begin(this, true);
        }
5gfr0r5j

5gfr0r5j1#

问题是您试图同时设置宽度和高度的动画。在第一个动画之后运行第二个动画,方法是增加KeyTime

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="window" Storyboard.TargetProperty="(FrameworkElement.Height)">
    <EasingDoubleKeyFrame KeyTime="00:00:01" Value="400"/>
</DoubleAnimationUsingKeyFrames>

或者尝试将SizeToContent属性设置为WidthAndHeight,指定根面板的大小,然后按照建议的here设置此面板的动画。

相关问题