在开始之前,我在自定义用户控件中有这个代码:
private DependencyProperty _rotation = DependencyProperty.Register("Rotation", typeof(double), typeof(MyControl),
new PropertyMetadata(new PropertyChangedCallback(RotationPropertyChanged)));
public double Rotation
{
get { return (double)GetValue(_rotation); }
set { SetValue(_rotation, value); }
}
public static void RotationPropertyChanged(DependencyObject obj, System.Windows.DependencyPropertyChangedEventArgs e)
{
//How can I start Animation, as I'm in a Static method?
}
属性设置正确,我的RotationPropertyChanged函数也被正确调用。如您所见,我在该方法中的评论是我的问题。由于这个处理程序需要是静态的(VS告诉我),如何访问非静态内容,例如故事板,以便我可以开始动画?
详细说明数据绑定:
My Viewmodel正在更新属性(位于同一个viewmodel中),该属性通过Xaml数据绑定到此依赖项属性。我希望我没有必要使用这个回调,但没有它就不会更改属性。
由于
答案 0 :(得分:8)
您可以将传递给静态事件处理程序的DependencyObject
强制转换为您的控件类型,然后在其上调用实例方法。我认为这是一个非常常见的模式,在Silverlight / WPF中具有依赖属性:
private DependencyProperty _rotation = DependencyProperty.Register(
"Rotation",
typeof(double),
typeof(MyControl),
new PropertyMetadata(new PropertyChangedCallback(RotationPropertyChanged)));
public double Rotation
{
get { return (double)GetValue(_rotation); }
set { SetValue(_rotation, value); }
}
public static void RotationPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
((MyControl)obj).RotationPropertyChanged(e);
}
private void RotationPropertyChanged(DependencyPropertyChangedEventArgs e)
{
// Start your animation, this is now an instance method
}