這可能與動畫有關。我有一個WPF控件,它的寬度和高度通過幾個不同的故事板進行動畫處理。我創建了故事板,然後在它們上面調用Begin()。我已經提供了關於下面的故事板的代碼。無法以編程方式設置WPF中動畫控件的寬度或高度(甚至不通過Snoop)
我想在某些事件(例如窗口大小調整)上重新評估控件大小,以便它與動畫的值不同。我嘗試通過設置我的控件的Width
和Height
屬性手動(在動畫運行後)在SizeChanged上處理此問題。調試器顯示這些值未設置(原始值保留)。
當我通過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()
210級。
想法?
對我而言,您需要先停止這些故事板。 –
@HighCore我認爲它會自動停止。我剛剛發現了這篇MSDN文章,它告訴我需要將FillBehavior設置爲Stop,以便在完成時停止:http://msdn.microsoft.com/en-us/library/aa970493.aspx – sohum
嗯,如果我設置FillBehavior停止並調整窗口大小(觸發設置控件的寬度和高度,調用UpdateLayout並在控件上調用InvalidateVisual),動畫不再再動畫到所需的寬度和高度 - 而是通過調整大小設置動畫。我是否需要爲每個動畫創建一個新的故事板? – sohum