Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在wpf中实现背景图像的连续移动_C#_Wpf - Fatal编程技术网

C# 如何在wpf中实现背景图像的连续移动

C# 如何在wpf中实现背景图像的连续移动,c#,wpf,C#,Wpf,我在我的wpf应用程序中有一个背景图像,我想实现背景图像连续移动的效果。下面的代码可以实现一个简单的效果,但是当画面结束的时间再次移动过来时,我想让这张画面的效果一直移动不停的现象 void StartBackgroudMove() { Storyboard sb = new Storyboard(); DoubleAnimation TranslateXExtendAnimation = new DoubleAnimation() { From = 0, To = -100,

我在我的wpf应用程序中有一个背景图像,我想实现背景图像连续移动的效果。下面的代码可以实现一个简单的效果,但是当画面结束的时间再次移动过来时,我想让这张画面的效果一直移动不停的现象

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。