我在Metro XAML應用程序中混淆了一些Storyboard。我必須在代碼中創建一個Storyboard
。我想設置Storyboard.TargetProperty
到CompositeTransform.Rotation
無法將Storyboard.TargetProperty設置爲Metro風格應用程序中的CompositeTransform.Rotation,代碼爲
這似乎是不可能的......
我的故事板在XAML看起來是這樣的:
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="grid">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="60"/
</DoubleAnimationUsingKeyFrames>
</Storyboard>
我想創建類似的東西。
重要提示:我不想重新創建這個確切的故事板。我在自定義ContentControl
的代碼中,所以this
是Control
,並且沒有「網格」來定位動畫。目標是控制本身,其中有CompositeTransform
以前設置。
到目前爲止我的代碼是這樣的:
var turnSB = new Storyboard();
var doubleAnim = new DoubleAnimationUsingKeyFrames();
doubleAnim.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromMilliseconds(0), Value = currentAngle });
doubleAnim.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromMilliseconds(500), Value = targetAngle });
turnSB.Children.Add(doubleAnim);
Storyboard.SetTarget(doubleAnim, this.RenderTransform);
Storyboard.SetTargetProperty(doubleAnim, "(CompositeTransform.Rotation)");
turnSB.Begin();
只要它擊中Begin方法我得到一個異常說(CompositeTransform.Rotation)不能得到解決。所以我猜我沒有得到物業路徑非常正確。我嘗試了不同的變體,但根據PropertyPaths,這應該是正確的,不是嗎? :S
如果這是一個無法解決的問題,我願意在解決方法建議...
編輯:
我想我已經解決了這個問題現在。我有一些有趣的發現,雖然...
如果我做一個用戶控件,我幾乎可以做任何事情。一切正常,我可以設置Storyboard.Target屬性,並且動畫可以正確播放。
但是,如果我使用自定義控件,或從另一個控件(比如ContentControl)繼承,我無法從代碼啓動Storyboard,僅在某些情況下。
例如:如果我製作一個Storyboard(在XAML中定義)來爲Rotation(或任何轉換屬性)製作動畫並嘗試從代碼開始,我會得到上述異常。但是,如果我爲一個簡單的屬性創建動畫,比如說不透明度,它就可以正常工作。
(我用UserControl做了同樣的工作,它工作。)
有人可以解釋這個嗎?
我有同樣的問題,有從電網控制一個類繼承,故事簡單地贏得」開始。 – 2013-01-16 09:40:13
有一點需要注意的是,Grid不是從Control繼承的,所以它不是一個真正的自定義控件。 – 2013-01-18 05:27:05
我沒有使用Grid,我從ContentControl繼承。 xaml來自之前的嘗試,我有一個擁有網格的UserControl,並且這是動畫的目標。但是對於這種情況,目標應該是控制本身。其中 - 如果你仔細閱讀 - 我在'重要'一節中描述。 – Tenshiko 2013-01-29 16:37:20