2017-08-08 17 views
0

Storyboardを使用してWPFウィンドウのサイズを変更しようとしています。私のコードは、ウィンドウの幅や高さをアニメーション化すると完全に機能しますが、私は両方のストーリーボードを適用するときに、最初のプロパティ(私の場合は幅)のみをアニメーション化し、2番目のプロパティをスキップします。WPF Storyboardでウィンドウの幅を高さで変更できない

私のコードは次のとおりです。

private void AnimateWindowSize(double width, double height, bool isRelative = false) 
    { 
     //--------------------------------------------------- 
     // Settings 
     //--------------------------------------------------- 

     var duration = TimeSpan.FromSeconds(0.2); 
     var newWidth = isRelative ? this.Width - width : width; 
     var newHeight = isRelative ? this.Height - height : height; 

     Console.WriteLine($"Animating window from {this.Width}x{this.Height} to {newWidth}x{newHeight}"); 

     this.Dispatcher.BeginInvoke(new Action(() => 
     { 
      var storyboard = new Storyboard(); 

      //--------------------------------------------------- 
      // Animate Width 
      //--------------------------------------------------- 
      var widthAnimation = new DoubleAnimation() 
      { 
       Duration = new Duration(duration), 
       From = this.ActualWidth, 
       To = newWidth 
      }; 

      Storyboard.SetTarget(widthAnimation, this); 
      Storyboard.SetTargetProperty(widthAnimation, new PropertyPath(Window.WidthProperty)); 
      storyboard.Children.Add(widthAnimation); 

      //--------------------------------------------------- 
      // Animate Width 
      //--------------------------------------------------- 
      var heightAnimation = new DoubleAnimation() 
      { 
       Duration = new Duration(duration), 
       From = this.ActualHeight, 
       To = newHeight 
      }; 

      Storyboard.SetTarget(heightAnimation, this); 
      Storyboard.SetTargetProperty(heightAnimation, new PropertyPath(Window.HeightProperty)); 
      storyboard.Children.Add(heightAnimation); 

      //--------------------------------------------------- 
      // Play 
      //--------------------------------------------------- 
      //storyboard.Begin(); 
      this.BeginStoryboard(storyboard, HandoffBehavior.SnapshotAndReplace, false); 
     }), null); 
    } 

ところで、私は、メニューの大きさなどをアニメーション化するためのこの方法のジェネリック版を作成しましたし、それが完璧に動作します。これは、ウィンドウアニメーションの唯一の問題であるようです。誰もそれを修正し、ウィンドウの幅と高さの両方にアニメーションを適用する方法を知っていますか?私はSOの答えの後に続きましたが、それらのすべてはWindow以外の要素に関連していました。

答えて

0

heightAnimationから期間を削除します。

+0

ありがとうございました。 heightAnimaionの継続時間を削除すると、2つのアニメーションが実際に実行されますが、並列では実行されないため、幅と高さが同時にサイズ変更されます。期間を削除すると、ウィンドウの幅とその高さがリサイズされます。 – OzB

+0

こんにちは、幅と高さを平行にアニメーション化することはできません。ここで回避策を見つけることができます。https://stackoverflow.com/questions/12332385/animating-a-wpf-window-width-and-height – Schnatti

関連する問題