Непрерывная анимация WPF

#c# #wpf #animation

#c# #wpf #Анимация

Вопрос:

Я пытаюсь сделать некоторые изображения циклическими, вроде того, что вы видите в игровом автомате. Мой текущий код больше похож на маркер, поэтому изображения идут сверху вниз, и во время их перемещения за первым изображением остается некоторый пробел.

Как я могу сделать так, чтобы последнее изображение сразу следовало за первым изображением в цикле?

XAML:

 <Window x:Class="SlotV3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Slot Machine" Height="600" Width="800" Loaded="Window_Loaded">
<Grid>
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="634,185,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    <Canvas Name="canvas1" Margin="82,49,458,12" ClipToBounds="True" Height="500">
        <StackPanel Height="1043" Name="stackPanel1" Width="193" Canvas.Left="28" Canvas.Top="8">
            images here...
        </StackPanel>
    </Canvas>
</Grid>
</Window>
  

и код анимации, который я использую:

 DoubleAnimation da = new DoubleAnimation();
        da.From = -stackPanel1.ActualHeight;
        da.To = canvas1.ActualHeight;
        da.Duration = new Duration(TimeSpan.FromSeconds(0.25));
        da.RepeatBehavior = RepeatBehavior.Forever;
        stackPanel1.BeginAnimation(Canvas.TopProperty, da);
  

Ответ №1:

Я думаю, что следующий способ проще. Попробуйте использовать это событие:

 public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        CompositionTarget.Rendering  = new EventHandler(CompositionTarget_Rendering);
    }

    void CompositionTarget_Rendering(object sender, EventArgs e)
    {
        Rectangle smoke = new Rectangle();
        LayoutRoot.Children.Add(smoke);
        smoke.Y -= 5;
    }
}
  

Это псевдокод, но эта стратегия заставит объект запускаться снизу вверх.

http://msdn.microsoft.com/en-us/library/system.windows.media.compositiontarget.rendering.aspx#Y228