WPFカスタムルーティングイベントの質問
-
07-07-2019 - |
質問
2つの無関係なコントロールを取得して、同じカスタムイベントを発生させるにはどうすればよいですか?これまでに見たすべての例では、単一のコントロール内でイベントが定義されていますが、別のアプローチを取るべきですか?
たとえばボタンとテキストボックスのOnFocusハンドラーからカスタムバブリングイベントを発生させたい。
解決
最初に、既存の UIElement.GotFocusEvent ですが、それについて知っていて、使用しない理由があると仮定します。
静的クラスでカスタムイベントをいつでも登録し、必要な場所で発生させることができます。 キーボードクラスはすべてのイベント(例: Keyboard.KeyDownEvent )。
public static class RoutedEventUtility
{
public static readonly RoutedEvent MyCustomEvent = EventManager.RegisterRoutedEvent("MyCustomEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RoutedEventUtility));
}
他のRoutedEventと同じようにイベントを発生させます。
RoutedEventArgs args = new RoutedEventArgs(RoutedEventUtility.MyCustomEvent);
RaiseEvent(args);
別のクラスがイベントをパブリックフィールドとして所有する場合は、所有者を追加する必要があります。
public class MyCustomControl : Control
{
public static readonly RoutedEvent MyCustomEvent = RoutedEventUtility.MyCustomEvent.AddOwner(typeof(MyCustomControl));
}
所属していません StackOverflow