我在 XAML 中定义 EventHandler 时遇到问题。请查看代码,您将了解我正在尝试做什么以及我如何尝试在 XAML 中分配方法,或者更好地说明我如何在 XAML 中定义 EventHandler。
这是代码:
public static EventHandler<EventArgs> GetResetValue(DependencyObject obj)
{
return (EventHandler<EventArgs>)obj.GetValue(ResetValueProperty);
}
public static void SetResetValue(DependencyObject obj, EventHandler<EventArgs> value)
{
obj.SetValue(ResetValueProperty, value);
}
// Using a DependencyProperty as the backing store for ResetValue. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ResetValueProperty =
DependencyProperty.RegisterAttached("ResetValue", typeof(EventHandler<EventArgs>), typeof(Extension), new UIPropertyMetadata(null, OnResetValue));
private static void OnResetValue(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
DependencyObject obj = dependencyObject;
for (; obj != null && !(obj is TextBox); obj = VisualTreeHelper.GetParent(obj)) ;
TextBoxtbx = obj as TextBox;
if (tbx != null)
{
tbx.TextChanged += (EventHandler<EventArgs>)dependencyPropertyChangedEventArgs.NewValue;
}
}
XAML 看起来像这样:
<TextBox>
<Button>
<Label ext:Extension.ResetValue=".. here i want to assign the handler, as examle DoSomething" >
</Button>
</TextBox>
我希望分配给附加处理程序的方法在 Window.cs 中,例如:
public void DoSomething(object sender, EventArgs e)
{
....
}
正如您在 OnResetValue 方法中看到的那样,我沿着 VisualTree 向上移动,直到找到 TextBox 并将处理程序添加到 TextBox.TextChanged 事件。
当 TextChanged 时,将调用附加的处理程序方法,该方法将调用分配的方法
问题是如何使用 DoSomething 方法在 XAML 中定义附加的处理程序?请不要替代解决方案。如果可能的话,我想用事件来做到这一点。