質問

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));
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top