从 C# 代码启动情节提要

本文关键字:动情 启动 代码 | 更新日期: 2023-09-27 18:30:37

我正在尝试从 C# 调用用 xaml 代码声明的故事板:

<Storyboard x:Key="BotRotation"  Duration="00:00:4" RepeatBehavior="Forever" >
            <DoubleAnimation BeginTime="0:0:0"
            Storyboard.TargetName="imageRotateTransformm"
            Storyboard.TargetProperty="ScaleX"
            From="1" To="-1"
            Duration="0:0:2"   
            />
            <DoubleAnimation
            BeginTime="0:0:2"
            Storyboard.TargetName="imageRotateTransformm"
            Storyboard.TargetProperty="ScaleX"
            From="-1" To="1"
            Duration="0:0:2"  
            />
        </Storyboard>
</Window.Resources>

此情节提要应修改图像的 ScaleX 属性。图片声明:

<Image Name="uiRobotIcon" Height="64" Width="64" Source="/YoutubeTelegramAudio;component/imgs/ic_robot.png" RenderTransformOrigin="0.5,0.5">
            <Image.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="1" ScaleX="1" x:Name="imageRotateTransformm" />
                    <SkewTransform AngleY="0" AngleX="0" />
                    <RotateTransform Angle="0" />
                    <TranslateTransform/>
                </TransformGroup>
            </Image.RenderTransform>
        </Image>

然后,我想在单击另一个按钮时从 C# 启动此动画。谢谢。

从 C# 代码启动情节提要

很容易。只需找到Resource,将其强制转换为Storyboard,然后调用其Begin()方法:

Storyboard sb = (<YourNamespace>.Properties.Resources["BotRotation"] as Storyboard);
sb.Begin();

将上面的代码放在某个事件处理程序中,它应该可以正常工作。

但:

在应用程序中声明情节提要的位置也很重要。如果它在 App.xaml ,那么不用担心,但在其他任何地方,它可能无法访问。但我认为Window.Resources标签也可以包含可访问的资源。我现在无法测试它:)

我找到了解决方案。首先,我将故事板标签包含在 BeginStoryboard 中:

<Window.Resources>
    <BeginStoryboard x:Key="BotRotation">
        <Storyboard   Duration="00:00:4" RepeatBehavior="Forever" >
            <DoubleAnimation BeginTime="0:0:0"
            Storyboard.TargetName="imageRotateTransformm"
            Storyboard.TargetProperty="ScaleX"
            From="1" To="-1"
            Duration="0:0:2"   
            />
            <DoubleAnimation
            BeginTime="0:0:2"
            Storyboard.TargetName="imageRotateTransformm"
            Storyboard.TargetProperty="ScaleX"
            From="-1" To="1"
            Duration="0:0:2"  
            />
        </Storyboard>
    </BeginStoryboard>
</Window.Resources>

最后,我用下面的语句调用 C# 中的动画:

BeginStoryboard sb = this.FindResource("BotRotation") as BeginStoryboard;
sb.Storyboard.Begin();

您也可以在纯 xaml 中执行此操作,只需使用触发器操作:

    <Button>
        <Button.Triggers>
            <EventTrigger RoutedEvent="PreviewMouseDown">
                <BeginStoryboard  Storyboard="{DynamicResource BotRotation}"/>
            </EventTrigger>
        </Button.Triggers>
    </Button>

我在代码项目中找到了一个解决方案:https://www.codeproject.com/Articles/364529/Animation-using-Storyboards-in-WPF

首先添加标签:

<窗口资源>

现在,您可以创建情节提要:

     <Storyboard x: Key = "yourSb">
         <DoubleAnimation Storyboard.TargetName = "_ window"
       Storyboard.TargetProperty = "Opacity" From = "1" To = "0.3"
       Duration = "0: 0: 1" />
     </Storyboard>

不要忘记在故事板标签的开头添加"x: key = "yourSb"。

在您的代码隐藏中:

       Storyboard s = (Storyboard)TryFindResource("yourSb");
        s.Begin();