Как создать анимацию поворота на объекте изображения, используя только код c # (внутри окна WPF)

У меня есть пара открытых вопросов, касающихся того же рода вещей,

Я довольно новичок в WPF, но опыт работы с C # и Winforms.

Я посмотрел вокруг на веб-сайте для рабочего примера, но еще не нашел тот, который работает.

Чего я хочу добиться, так это с помощью функции C # создать следующее

create an image (image 1) create an image (image 2) put the images on the window side by side create a storyboard animate the rotate property of image1 from 0 to 360 (animation1) animate the opacity property of image 2 from full to invisible (animation2) the storyboard should run for ten seconds with animation 1 starting at 0 seconds and animation 2 starting at 5 seconds

извиняюсь за явный запрос на код, но, я посмотрел и попробовал, мой предыдущий вопрос имел полный код, который выполнялся, но анимация не показывалась (ссылка ниже)

как создать раскадровку и вращение изображения в wpf с помощью кода C #

заранее спасибо

Дан.

 Pyritie22 мар. 2017 г., 14:55
 user135055517 июн. 2012 г., 21:32
правда, изображение и местоположение могут быть в XAML, но раскадровка и анимация должны быть в C #
 Tim17 июн. 2012 г., 20:58
Вам действительно нужно все это в коде C #? части этого (в частности, создание изображения и размещение их в окне) в XAML намного проще.
 Tim17 июн. 2012 г., 21:36
Хорошо, я пошел вперед и сделал все это XAML, а затем все C #. Вы можете смешивать и сочетать по мере необходимости :)

Ответы на вопрос(2)

Решение Вопроса

за которой следует то же самое в C #. Может быть, не совсем то, что вы хотели, но это должно проиллюстрировать это.

Версия 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="MainWindow" 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();
    }
 16 мая 2014 г., 04:39
Это здорово - один вопрос, как установить центральную точку поворота в центр изображения (я использую Путь, а не изображение).
 18 июн. 2012 г., 06:26
Вы качаетесь, это абсолютно идеально. благодарю вас...
 17 сент. 2014 г., 05:08
@Duncan, попробуйте установить RenderTransformOrigin в (0.5,0.5).
 17 сент. 2014 г., 09:02
Спасибо, мне удалось это выяснить.

1-программа создает таймер

2-Программа проверяет таймер с установленными интервалами, чтобы увидеть, сколько времени прошло.

3-Каждый раз, когда программа проверяет таймер, она вычисляет текущее значение непрозрачности для прямоугольника, основываясь на том, сколько времени прошло.

4. Затем программа обновляет прямоугольник новым значением и перерисовывает его.

Ниже приведен код, который создает Rectangle и анимирует его.

<Window x:Class="Animation.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Animated Rectangle" Height="350" Width="525">
<Grid>
    <StackPanel Margin="10">
        <Image Name="MyImage" Source="e:\a.jpg" Width="100" Margin="50" ></Image>
        <Rectangle
            Name="MyRectangle"
            Width="100" 
            Height="100"
            Fill="Blue">

            <Rectangle.Triggers>
                <!-- Animates the rectangle's opacity. -->
                <EventTrigger RoutedEvent="Rectangle.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetName="MyImage" 
                                Storyboard.TargetProperty="Opacity"
                                From="1.0" To="0.0" Duration="0:0:3" 
                                AutoReverse="True" RepeatBehavior="Forever" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Rectangle.Triggers>
        </Rectangle>
    </StackPanel>
</Grid>

Ваш ответ на вопрос