gpt4 book ai didi

c# - WPF Storyboard : DoubleAnimation Works On Opacity But Not TranslateTransform?

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:18 25 4
gpt4 key购买 nike

为了了解动画和 UI,我正在制作一个基本的 WPF/C# 应用程序,用户可以在其中选择要显示的车辆数量,然后这些车辆(即不同车辆的图像)出现在 Canvas 中并四处移动。

WPF 非常简单:

    <Grid>
<Canvas x:Name="MenuTabCanvas" Visibility="Visible">
<Label x:Name="AnimateDemo" Content="Animate!" HorizontalAlignment="Left" VerticalAlignment="Top" Width="104" Background="#25A0DA" Foreground="White" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Cursor="Hand" MouseDown="AnimateGrid" Canvas.Left="640" Canvas.Top="87"/>
<Canvas x:Name="AnimationCanvas" Canvas.Top="150" Canvas.Left="224" Width="814" Height="489">
</Canvas>
</Grid>

我使用 this post 中描述的方法从淡入淡出动画开始它工作正常。然后我尝试了如下所示的 translatetransform,在注释中留下淡入淡出代码,图像出现但没有任何移动:

  private void AnimateGrid(object sender, EventArgs e)
{
int NumberOfVehicles = 5;
var sb = new Storyboard();

for (int i = 0; i < NumberOfVehicles; i++)
{
//create & add the images to our target canvas
Image Img = getRandomVehicleImage(); //returns image of vehicle
AnimationCanvas.Children.Add(Img);

Canvas.SetTop(Img, 30 + 60 * i); //position image w/in canvas
Canvas.SetLeft(Img, 30 + 80 * i);

//add an animation
DoubleAnimation myAnimation = new DoubleAnimation()
{
// From = 0,
To = 150,
Duration = TimeSpan.FromSeconds(2),
};
Storyboard.SetTarget(myAnimation, Img);
// Storyboard.SetTargetProperty(myAnimation, new PropertyPath(Button.OpacityProperty));
Storyboard.SetTargetProperty(myAnimation, new PropertyPath(TranslateTransform.XProperty));
sb.Children.Add(myAnimation);
}
sb.Begin();
}

我已经能够让它与 TranslateTransform.BeginAnimation 一起工作,但我更愿意在这里使用 Storyboard。

为什么平移变换的行为与不透明度动画不同,我需要做什么才能让它按预期运行?

最佳答案

默认情况下,没有应用于 UIElement 的 TranslateTransform。所以如果你想移动一个图像,你首先必须将它的 RenderTransform 属性设置为一个 TranslateTransform,然后将 TargetProperty 设置为正确的属性路径:

Img.RenderTransform = new TranslateTransform();
...
Storyboard.SetTargetProperty(myAnimation, new PropertyPath("RenderTransform.X"));

或者,即使没有 Storyboard,您也可以直接为 TranslateTransform 设置动画:

var transform = new TranslateTransform();
Img.RenderTransform = transform;

transform.BeginAnimation(TranslateTransform.XProperty, myAnimation);

关于c# - WPF Storyboard : DoubleAnimation Works On Opacity But Not TranslateTransform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com