我創建了我自己的繼承自FrameworkElement的類(對於Triggers屬性)。我想申請一個動畫,這將改變Angle屬性:如何在WPF中的自定義類上應用動畫?
<MyClass Name="MyName" Angle="30">
<MyClass.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever">
<DoubleAnimation Storyboard.TargetName="MyName"
Storyboard.TargetProperty="Angle" From="0" To="90"
Duration="0:0:1" BeginTime="0:0:0"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</MyClass.Triggers>
</MyClass>
類本身看起來是這樣的:
public class MyClass: FrameworkElement
{
//dependency property
public const string AnglePropertyName = "Angle";
public double Angle
{
get
{
return (double)GetValue(AngleProperty);
}
set
{
SetValue(AngleProperty, value);
}
}
public static readonly DependencyProperty AngleProperty =
DependencyProperty.Register(AnglePropertyName, typeof(double), typeof(MyClass), new UIPropertyMetadata(new double()));
}
不幸的是動畫不起作用。如果我把EventTrigger放在裏面,比方說Button.Triggers,那麼它就可以工作。我在寫課程的時候錯過了什麼?
您可以驗證我們,角度的值不會改變?屬性setter中的斷點是不夠的。您需要使用接受PropertyChanged回調的UIPropertyMetadata構造函數重載作爲綁定/樣式/動畫直接訪問依賴項屬性,而不是getter/setter對。 http://msdn.microsoft.com/en-us/library/ms587986%28v=vs.110%29.aspx – Gusdor
@Gusdor:說實話,我甚至不知道該怎麼做。我應該從UIPropertyMetadata類創建一個新的類,並重寫它的構造函數嗎? –
這裏有個很好的例子http://social.msdn.microsoft.com/Forums/vstudio/en-US/9c641ca3-58a0-4adf-b73f-f1cb4761e883/how-do-i-detect-change-to-any -property-on-a-dependencyobject?forum = wpf – Gusdor