1

次のことを行うマルチパートタイマーを作成しようとしています...

  • キャンバス オブジェクトを下にスライドします。
  • オブジェクトを画面外に変更します。
  • キャンバス オブジェクトを上に (元の位置に) スライドします。

これはDispatcher タイマーによって5秒ごとにトリガーされますが、オブジェクトを上下にスライドさせる方法がわかりません。これにループを使用しようとすると、アプリケーションがロックアップしてしまいます。

これをどのように行うことができるかについてのアイデアは、私にとって大きな助けになるでしょう、ありがとう.

4

1 に答える 1

1

WPF には、このようなものを処理するための優れたアニメーション クラスがあります。

簡単な例を次に示します (コード ビハインドのみ)。このメソッドを複数のアプリケーションで使用して、アニメーションをすばやく作成します。

    /// <summary>
    /// Creates a double animation.
    /// </summary>
    /// <param name="from">From position</param>
    /// <param name="to">To position</param>
    /// <param name="duration">The duration.</param>
    /// <param name="delay">The delay.</param>
    /// <param name="autoreverse">if set to <c>true</c> [autoreverse].</param>
    /// <param name="repeat">The times to repeat.</param>
    /// <returns>new double animation</returns>
    public static DoubleAnimationUsingKeyFrames GetDoubleAnimation(double from, double to, int duration, int delay, bool autoreverse, int repeat)
        {
            var doubleanimation = new DoubleAnimationUsingKeyFrames();
            doubleanimation.AutoReverse = autoreverse;
            doubleanimation.IsAdditive = false;
            Storyboard.SetDesiredFrameRate(doubleanimation, 30);
            doubleanimation.IsCumulative = false;
            doubleanimation.BeginTime = new TimeSpan(0, 0, 0, 0, delay);
            doubleanimation.Duration = new Duration(TimeSpan.FromMilliseconds(duration));
            doubleanimation.RepeatBehavior = repeat == -1 ? RepeatBehavior.Forever : new RepeatBehavior(repeat);
            EasingDoubleKeyFrame start = new EasingDoubleKeyFrame(from, KeyTime.FromPercent(0));
            EasingDoubleKeyFrame end = new EasingDoubleKeyFrame(to, KeyTime.FromPercent(1.0));
            doubleanimation.KeyFrames.Add(start);
            doubleanimation.KeyFrames.Add(end);
            return doubleanimation;
        }

使用法:

   myCanvas.BeginAnimation(Canvas.TopProperty, GetDoubleAnimation(100, 400, 2000,0,false,1));

これにより、キャンバスが 2 秒間で 100 から 400 まで垂直方向にアニメーション化されます。

Xaml:

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Canvas>
        <Canvas Name="myCanvas" Margin="77,102,191,102" Background="Black" Height="73" Width="113" />
    </Canvas>
</Window>
于 2012-11-28T01:11:01.957 に答える