C# 如何在wpf中实现背景图像的连续移动
我在我的wpf应用程序中有一个背景图像,我想实现背景图像连续移动的效果。下面的代码可以实现一个简单的效果,但是当画面结束的时间再次移动过来时,我想让这张画面的效果一直移动不停的现象C# 如何在wpf中实现背景图像的连续移动,c#,wpf,C#,Wpf,我在我的wpf应用程序中有一个背景图像,我想实现背景图像连续移动的效果。下面的代码可以实现一个简单的效果,但是当画面结束的时间再次移动过来时,我想让这张画面的效果一直移动不停的现象 void StartBackgroudMove() { Storyboard sb = new Storyboard(); DoubleAnimation TranslateXExtendAnimation = new DoubleAnimation() { From = 0, To = -100,
void StartBackgroudMove()
{
Storyboard sb = new Storyboard();
DoubleAnimation TranslateXExtendAnimation = new DoubleAnimation() { From = 0, To = -100, Duration = TimeSpan.FromMilliseconds(2500) };
Storyboard.SetTarget(TranslateXExtendAnimation, BackgroundImage);
Storyboard.SetTargetProperty(TranslateXExtendAnimation, new PropertyPath("(FrameworkElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
sb.Children.Add(TranslateXExtendAnimation);
sb.FillBehavior = FillBehavior.Stop;
sb.Completed += (s, args) =>
{
this.StartBackgroudMove();
};
sb.Begin();
}
您可以将
情节提要.RepeatBehavior
设置为RepeatBehavior.Forever
例如:
void StartBackgroudMove()
{
Storyboard sb = new Storyboard();
DoubleAnimation TranslateXExtendAnimation = new DoubleAnimation() { From = 0, To = -100, Duration = TimeSpan.FromMilliseconds(2500) };
Storyboard.SetTarget(TranslateXExtendAnimation, BackgroundImage);
Storyboard.SetTargetProperty(TranslateXExtendAnimation, new PropertyPath("(FrameworkElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
sb.Children.Add(TranslateXExtendAnimation);
sb.FillBehavior = FillBehavior.Stop;
sb.RepeatBehavior = RepeatBehavior.Forever;
sb.Begin();
}
您可以将
情节提要.RepeatBehavior
设置为RepeatBehavior.Forever
例如:
void StartBackgroudMove()
{
Storyboard sb = new Storyboard();
DoubleAnimation TranslateXExtendAnimation = new DoubleAnimation() { From = 0, To = -100, Duration = TimeSpan.FromMilliseconds(2500) };
Storyboard.SetTarget(TranslateXExtendAnimation, BackgroundImage);
Storyboard.SetTargetProperty(TranslateXExtendAnimation, new PropertyPath("(FrameworkElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
sb.Children.Add(TranslateXExtendAnimation);
sb.FillBehavior = FillBehavior.Stop;
sb.RepeatBehavior = RepeatBehavior.Forever;
sb.Begin();
}
您可以使用图像笔刷,将
TileMode
设置为Tile
,并设置其视口
属性的动画:
<Grid>
<Grid.Background>
<ImageBrush ImageSource="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"
Stretch="Fill" TileMode="Tile"
ViewportUnits="Absolute" Viewport="0,0,1024,768"/>
</Grid.Background>
<Grid.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<RectAnimation Storyboard.TargetProperty="Background.Viewport"
To="-1024,0,1024,768" Duration="0:0:10"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
您可以使用图像笔刷,将
TileMode
设置为Tile
,并设置其视口
属性的动画:
<Grid>
<Grid.Background>
<ImageBrush ImageSource="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"
Stretch="Fill" TileMode="Tile"
ViewportUnits="Absolute" Viewport="0,0,1024,768"/>
</Grid.Background>
<Grid.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<RectAnimation Storyboard.TargetProperty="Background.Viewport"
To="-1024,0,1024,768" Duration="0:0:10"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
背景图像连续移动的效果可以达到,但仍存在停顿现象。当图片移动100时,它又从头开始移动。我希望它是不间断的连续移动。你能做到吗?背景图像连续移动的效果是可以实现的,但仍然存在停顿现象。当图片移动100时,它又从头开始移动。我希望它是不间断的连续移动。你能做到吗?我还想问一个问题:如果它只是一个图像而不是一个ImageBrush,如何实现效果?你可以使用两个图像控件来显示相同的图像,可能是在一个常见的容器(如StackPanel)中。然后将两者(或容器)移动一个图像宽度,然后恢复到初始位置。如果您在实现方面遇到问题,我会将其添加到我的答案中。我已尝试按照您的意思进行操作。我发现我无法使两张图片一张一张地平滑移动。嗨,克莱门斯,你的是一个非常好的可定制片段。工作起来很有魅力。然而,我插入了一套不同的价值观来满足我的需要。使视口与我的网格大小匹配,并使用FlipX TileMode。另外,我已经编辑了你的答案。将RoutedEvent从“Loaded”更改为“Grid.Loaded”。sine Loaded无法识别为RoutedEvent。我还想问一个问题:如果它只是一个图像而不是一个ImageBrush,如何实现效果?您可以使用两个图像控件来显示相同的图像,可能在StackPanel这样的公共容器中。然后将两者(或容器)移动一个图像宽度,然后恢复到初始位置。如果您在实现方面遇到问题,我会将其添加到我的答案中。我已尝试按照您的意思进行操作。我发现我无法使两张图片一张一张地平滑移动。嗨,克莱门斯,你的是一个非常好的可定制片段。工作起来很有魅力。然而,我插入了一套不同的价值观来满足我的需要。使视口与我的网格大小匹配,并使用FlipX TileMode。另外,我已经编辑了你的答案。将RoutedEvent从“Loaded”更改为“Grid.Loaded”,因为加载的未识别为RoutedEvent。