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以外の要素に関連していました。
ありがとうございました。 heightAnimaionの継続時間を削除すると、2つのアニメーションが実際に実行されますが、並列では実行されないため、幅と高さが同時にサイズ変更されます。期間を削除すると、ウィンドウの幅とその高さがリサイズされます。 – OzB
こんにちは、幅と高さを平行にアニメーション化することはできません。ここで回避策を見つけることができます。https://stackoverflow.com/questions/12332385/animating-a-wpf-window-width-and-height – Schnatti