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メソッドでわかるように、TextBoxが見つかるまでVisualTreeを上に移動し、TextBox.TextChangedイベントにハンドラーを追加します。
TextChangedの場合、アタッチされたハンドラーメソッドが呼び出され、割り当てられたメソッドが呼び出されます。
問題は、DoSomethingメソッドを使用してXAMLでアタッチされたハンドラーをどのように定義するかです。代替の解決策はありません。できればイベントでやりたいです。