これはアニメーション関連の可能性があります。幅と高さをいくつかの異なるストーリーボードでアニメーション化する WPF コントロールがあります。ストーリーボードを作成し、それに対して Begin() を呼び出します。ストーリーボードがどのように見えるかを示すコードを以下に示します。
アニメーション化された値とは異なるように、何らかのイベント (ウィンドウのサイズ変更など) でコントロールのサイズを再評価したいと考えています。Width
コントロールの プロパティとプロパティを設定して、(アニメーションの実行後に) SizeChanged でこれを手動で処理しようとしましたHeight
。デバッガーは、これらの値が設定されていないことを示します (元の値が残ります)。
Snoop を使用して WPF を調べると、幅と高さの行がピーチ/オレンジ色で強調表示され、再度値を設定しようとしても保持されません (フォーカスを外すと元の値が表示されます。私の推測では、アニメーションはプロパティへの手動変更を何らかの形でオーバーライドしていますが、これが本当かどうか、または解決方法がわかりません。
ストーリーボード クラス
public class MyAnimationClass
{
private Storyboard _myStoryboard;
private DoubleAnimation _animation1;
private DoubleAnimation _animation2;
private DoubleAnimation _animation3;
private void InitializeStoryboard()
{
_myStoryboard = CreateMyStoryboard(out _animation1, out _animation2, out _animation3);
}
private Storyboard CreateMyStoryboard(out DoubleAnimation animation1, out DoubleAnimation animation2, out DoubleAnimation animation3)
{
var myStoryboard = new Storyboard();
// create animations
animation1 = new DoubleAnimation { Duration = new TimeSpan(0, 0, 0, 0, 250), From = 0, To = 0 };
animation2 = new DoubleAnimation { BeginTime = new TimeSpan(), Duration = new TimeSpan(0, 0, 0, 0, 250), From = 35, To = 35 };
animation3 = new DoubleAnimation { BeginTime = new TimeSpan(0, 0, 0, 0, 250), Duration = new TimeSpan(0, 0, 0, 0, 250), From = 35, To = 0 };
Storyboard.SetTargetProperty(animation1, new PropertyPath(FrameworkElement.WidthProperty));
Storyboard.SetTargetProperty(animation2, new PropertyPath(FrameworkElement.HeightProperty));
Storyboard.SetTargetProperty(animation3, new PropertyPath(FrameworkElement.HeightProperty));
myStoryboard.Children.Add(animation1);
myStoryboard.Children.Add(animation2);
myStoryboard.Children.Add(animation3);
return myStoryboard;
}
public void Animate(Control controlToAnimate)
{
// ....
var finalWidth = CalculateFinalWidth();
var finalHeight = CalculateFinalHeight();
_animation1.To = finalWidth;
_animation3.To = finalHeight;
_myStoryboard.Begin(controlToAnimate);
}
}
何かをアニメーション化したいときは、自分のクラスAnimate()
のインスタンスを呼び出します。MyAnimationClass
考え?