#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