-2

私は次のようなキャンバス内の画像を持っています:

<Canvas x:Name="cnvMain"  ClipToBounds="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  SnapsToDevicePixels="True">
    <Image x:Name="Image1"   Stretch="None" Canvas.Bottom="0"  Source="ImageGallery/Desert.jpg" ></Image>
</Canvas>

画像を上下に移動するには、次のようにDoubleAnimationを使用しました。

 DoubleAnimation _Animation;
    private Storyboard _StoryBoard;

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        Canvas.SetZIndex(Image1, 1);

        _Animation = new DoubleAnimation();
        _Animation.From = -Image1.ActualHeight;
        _Animation.To = cnvMain.ActualHeight;
        _Animation.RepeatBehavior = RepeatBehavior.Forever;
        _Animation.Duration = new Duration(TimeSpan.Parse("0:0:10"));
        _Animation.FillBehavior = FillBehavior.Stop;
        Storyboard.SetTarget(_Animation, Image1);
        Storyboard.SetTargetProperty(_Animation, new PropertyPath(Canvas.BottomProperty));
        _StoryBoard = new Storyboard();
        _StoryBoard.Children.Add(_Animation);
        _StoryBoard.Begin();
        _StoryBoard.Pause();
    }
    public void Pause()
    {
        _StoryBoard.Pause();
    }
    public void Up()
    {
        _Animation.From = cnvMain.ActualHeight;
        _Animation.To = -Image1.ActualHeight;
        _StoryBoard.Resume();

    }
    public void Down()
    {
        _Animation.From = Image1.ActualHeight;
        _Animation.To = -cnvMain.ActualHeight;
        _StoryBoard.Resume();

    }

アニメーションは、FromとToを使用してUserControl_Loadedで初期化されます。私の問題は、このプロパティがDown and Topメソッド呼び出しで変更されなかったことです(メソッドは機能しましたが、画像は上に移動します)

4

1 に答える 1

0

以下のように変更して動作しました。

DoubleAnimation _Animation;
    private Storyboard _StoryBoard;

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        LoadAnimaiton(false);
        _StoryBoard.Pause();
    }

    private void LoadAnimaiton(bool up)
    {
        _StoryBoard = new Storyboard();
        _Animation = new DoubleAnimation(100.0, new Duration(TimeSpan.Parse("0:0:10")));
        _Animation.From = cnvMain.ActualHeight;
        _Animation.To = -Image1.ActualHeight;
        _Animation.RepeatBehavior = RepeatBehavior.Forever;
        _Animation.FillBehavior = FillBehavior.Stop;
        Storyboard.SetTarget(_Animation, Image1);
        Storyboard.SetTargetProperty(_Animation, new PropertyPath(Canvas.BottomProperty));

        if (up)
        {
            _Animation.From = cnvMain.ActualHeight;
            _Animation.To = -cnvMain.ActualHeight;
        }
        else
        {
            _Animation.From = -cnvMain.ActualHeight;
            _Animation.To = cnvMain.ActualHeight;
        }

        _StoryBoard.Children.Add(_Animation);

        _StoryBoard.Begin();
    }
    public void Pause()
    {
        _StoryBoard.Pause();
    }
    public void Down()
    {
        LoadAnimaiton(true);
    }

    public void Up()
    {
        LoadAnimaiton(false);
    }
于 2012-08-23T17:00:59.637 に答える