在下面的代码中,您可以看到我正在尝试做什么,但它不起作用。我想要一个事件,我可以附加到我的用户控制之外,并在依赖属性发生变化时触发。
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value"
, typeof(Double)
, typeof(ucSlider)
, new PropertyMetadata(50d, new PropertyChangedCallback(OnValueChanged)));
public Double Value
{
get { return (Double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public event PropertyChangedCallback OnValueChanged;
最佳答案
依赖属性是静态的,但你的事件与类的实例相关。所以你需要一个介于静态属性和实例事件之间的中间方法。
在此示例中,我将静态方法 OnValuePropertyChanged
作为回调参数传递,并在其中引发事件:
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value"
, typeof(Double)
, typeof(ucSlider)
, new PropertyMetadata(50d, new PropertyChangedCallback(OnValuePropertyChanged)));
public Double Value
{
get { return (Double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static void OnValuePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var sl = sender as ucSlider;
if (sl != null)
sl.RaiseValueChangedEvent(e);
}
private void RaiseValueChangedEvent(DependencyPropertyChangedEventArgs e)
{
if(this.OnValueChanged != null)
this.OnValueChanged(this, e);
}
public event PropertyChangedCallback OnValueChanged;
关于silverlight - 如何为依赖属性创建公共(public)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422914/