How do I create a rotate animation on an image object using c# code only (inside a WPF window)(如何仅使用 c# 代码在图像对象上创建旋转动画(在 WPF 窗口内))
问题描述
我有几个与同一类事情有关的未决问题,
I have a couple of open questions relating to the same sort of thing,
我对 WPF 很陌生,但对 C# 和 Winforms 很有经验.
I am quite new to WPF but experienced with C# and Winforms.
我在互联网上四处寻找一个可行的示例,但还没有找到一个可行的示例.
I have looked around on the interweb for a working example but have yet to find one that works.
我想要实现的是在 C# 函数中创建以下内容
What I want to achieve is in a C# function create the following
- 创建图像(图像 1)
 - 创建图片(图片 2)
 - 将图像并排放置在窗口中
 - 创建故事板
 - 将 image1 的旋转属性设置为 0 到 360 度的动画(动画 1)
 - 将图像 2 的不透明度属性从完全变为不可见(动画 2)
 - 故事板应该运行十秒钟,动画 1 开始0 秒,动画 2 从 5 秒开始
 
对代码的明确请求表示歉意,但是,我已经查看并尝试过,我之前的问题有完整的代码已执行但没有显示动画(下面的链接)
apologies for the explicit request for code, but, I have looked, and tried, my previous question had full code that executed but no animation showed (link below)
如何使用 c# 代码在 wpf 中创建故事板和旋转图像
提前致谢
丹.
推荐答案
这是您问题的有效 XAML 版本,后跟 C# 中的相同内容.可能不完全是你所追求的,但它应该说明它.
Here is a working XAML versionn of your question followed by the identical thing in C#. May not be exactly what you were after, but it should illustrate it.
XAML 版本:
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TWFpbldpbmRvdw==" Height="350" Width="525">
    <Window.Resources>
        <Storyboard x:Key="Storyboard" BeginTime="00:00:00.000" Duration="00:00:10.000">
            <DoubleAnimation Storyboard.TargetName="RotateImage" 
                             Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" 
                             From="0" To="360" BeginTime="00:00:05.000" Duration="00:00:05.000" />
            <DoubleAnimation Storyboard.TargetName="OpacityImage" 
                             Storyboard.TargetProperty="Opacity" 
                             From="1" To="0" Duration="00:00:10.000" />
        </Storyboard>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Image x:Name="RotateImage" Stretch="Uniform" Source="Chrysanthemum.jpg">
            <Image.RenderTransform>
                <RotateTransform Angle="0" />
            </Image.RenderTransform>
        </Image>
        <Image x:Name="OpacityImage" Grid.Column="1" Stretch="Uniform" Source="Desert.jpg" />
        <Button Grid.Row="1" Grid.ColumnSpan="2" Content="Start">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard Storyboard="{StaticResource Storyboard}" />
                </EventTrigger>
            </Button.Triggers>
        </Button>
    </Grid>
</Window>
和C#版本:
    public MainWindow()
    {
        InitializeComponent();
        Image rotateImage = new Image()
        {
            Stretch = Stretch.Uniform,
            Source = new BitmapImage(new Uri("pack://application:,,,/Chrysanthemum.jpg")),
            RenderTransform = new RotateTransform()
        };
        Image opacityImage = new Image()
        {
            Stretch = Stretch.Uniform,
            Source = new BitmapImage(new Uri("pack://application:,,,/Desert.jpg"))
        };
        LayoutRoot.Children.Add(rotateImage);
        LayoutRoot.Children.Add(opacityImage);
        Grid.SetColumn(opacityImage, 1);
        Storyboard storyboard = new Storyboard();
        storyboard.Duration = new Duration(TimeSpan.FromSeconds(10.0));
        DoubleAnimation rotateAnimation = new DoubleAnimation()
        {
            From = 0,
            To = 360,
            Duration = storyboard.Duration
        };
        DoubleAnimation opacityAnimation = new DoubleAnimation()
        {
            From = 1.0,
            To = 0.0,
            BeginTime = TimeSpan.FromSeconds(5.0),
            Duration = new Duration(TimeSpan.FromSeconds(5.0))
        };
        Storyboard.SetTarget(rotateAnimation, rotateImage);
        Storyboard.SetTargetProperty(rotateAnimation, new PropertyPath("(UIElement.RenderTransform).(RotateTransform.Angle)"));
        Storyboard.SetTarget(opacityAnimation, opacityImage);
        Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath("Opacity"));
        storyboard.Children.Add(rotateAnimation);
        storyboard.Children.Add(opacityAnimation);
        Resources.Add("Storyboard", storyboard);
        Button button = new Button()
        {
            Content = "Begin"
        };
        button.Click += button_Click;
        Grid.SetRow(button, 1);
        Grid.SetColumnSpan(button, 2);
        LayoutRoot.Children.Add(button);
    }
    void button_Click(object sender, RoutedEventArgs e)
    {
        ((Storyboard)Resources["Storyboard"]).Begin();
    }
                        这篇关于如何仅使用 c# 代码在图像对象上创建旋转动画(在 WPF 窗口内)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何仅使用 c# 代码在图像对象上创建旋转动画(在 WPF 窗口内)
				
        
 
            
        - 输入按键事件处理程序 2022-01-01
 - 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
 - 如何用自己压缩一个 IEnumerable 2022-01-01
 - Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
 - C# 中多线程网络服务器的模式 2022-01-01
 - WebMatrix WebSecurity PasswordSalt 2022-01-01
 - C#MongoDB使用Builders查找派生对象 2022-09-04
 - 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
 - MoreLinq maxBy vs LINQ max + where 2022-01-01
 - 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
 
						
						
						
						
						
				
				
				
				