我有以下WPF窗口:爲什麼自定義依賴項屬性不是由DoubleAnimation動畫的?
<Window x:Class="AnimationTest.MainWindow"
x:Name="main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" >
<Window.Resources>
<Storyboard RepeatBehavior="Forever" x:Key="animationStoryboard" TargetName="main" TargetProperty="CurrentOffset" >
<DoubleAnimation From="0" To="100" Duration="0:0:5" SpeedRatio=".8" AutoReverse="True" />
</Storyboard>
</Window.Resources>
<Grid>
</Grid>
</Window>
隨着後面的下面的代碼:
using System.Windows;
using System.Windows.Media.Animation;
namespace AnimationTest
{
public partial class MainWindow : Window
{
public static DependencyProperty CurrentOffsetProperty = DependencyProperty.Register("CurrentOffset", typeof(double), typeof(MainWindow), new FrameworkPropertyMetadata(OnCurrentOffsetPropertyChanged));
private static void OnCurrentOffsetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MainWindow control = (MainWindow)d;
}
public double CurrentOffset
{
get
{
return (double)base.GetValue(MainWindow.CurrentOffsetProperty);
}
set
{
MessageBox.Show("Hit");
base.SetValue(MainWindow.CurrentOffsetProperty, value);
}
}
public MainWindow()
{
InitializeComponent();
((Storyboard)base.FindResource("animationStoryboard")).Begin(this);
}
}
}
我預計將有CurrentOffset財產時間可持續電話了,但是什麼也沒有發生。這就像動畫不會啓動。任何人都可以指出我錯在哪裏?
在此先感謝。
以及AFAIK在您的文件的DP屬性定義從未被調用框架和代碼訪問DP落後時它只是作爲一個輔助你。所以即使動畫運行良好,您的MessageBox.Show()也不會被底層WPF系統調用。您是否嘗試在動畫完成後檢查DP的值以檢查其存儲值? – Viv
參見[這篇文章](http://msdn.microsoft.com/en-us/library/bb613563.aspx)對於什麼薇薇說的解釋(和移動'MessageBox.Show()'調用的'OnCurrentOffsetPropertyChanged '看看動畫是否有效)。 – Clemens