如何为我的 属性 创建自定义事件
how to create custom event for my property
我的自定义控件有一个 属性。
现在我想为我的 属性 创建一个 ValueChanged
活动。 (我的 属性 不需要回调,因为我希望用户可以使用此事件)
public double Value
{
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value",
typeof(double), typeof(SpeedoMeter),
new PropertyMetadata(0.0, null, OnCoerceValueChanged));
像往常一样定义一个事件(如果有意义,它可以定义为 routed event),然后在引发此事件的地方注册一个依赖项 属性 回调。像这样:
public event EventHandler ValueChanged;
public double Value
{
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(double), typeof(SpeedoMeter), new PropertyMetadata(0.0,
OnChanged,
OnCoerceValueChanged));
private static void OnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
SpeedoMeter speedoMeter = (SpeedoMeter)d;
EventHandler handler = speedoMeter.ValueChanged;
if (handler != null)
{
handler(speedoMeter, EventArgs.Empty);
}
}
显然,您可以为活动命名,属性 可以随意命名。如果你有一个 Value
属性 并且想要一个 ValueChanged
事件,你可以从 RangeBase
或类似的东西派生。这只是一个示例,说明当依赖项 属性 更改时如何引发自定义事件。
我的自定义控件有一个 属性。
现在我想为我的 属性 创建一个 ValueChanged
活动。 (我的 属性 不需要回调,因为我希望用户可以使用此事件)
public double Value
{
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value",
typeof(double), typeof(SpeedoMeter),
new PropertyMetadata(0.0, null, OnCoerceValueChanged));
像往常一样定义一个事件(如果有意义,它可以定义为 routed event),然后在引发此事件的地方注册一个依赖项 属性 回调。像这样:
public event EventHandler ValueChanged;
public double Value
{
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(double), typeof(SpeedoMeter), new PropertyMetadata(0.0,
OnChanged,
OnCoerceValueChanged));
private static void OnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
SpeedoMeter speedoMeter = (SpeedoMeter)d;
EventHandler handler = speedoMeter.ValueChanged;
if (handler != null)
{
handler(speedoMeter, EventArgs.Empty);
}
}
显然,您可以为活动命名,属性 可以随意命名。如果你有一个 Value
属性 并且想要一个 ValueChanged
事件,你可以从 RangeBase
或类似的东西派生。这只是一个示例,说明当依赖项 属性 更改时如何引发自定义事件。