2 つの無関係なコントロールを取得して、同じカスタム イベントを発生させるにはどうすればよいでしょうか? これまでに見たすべての例では、1 つのコントロール内でイベントが定義されていますが、別のアプローチを取る必要がありますか?
例えば。ボタンとテキスト ボックスの OnFocus ハンドラーからカスタム バブリング イベントを発生させたいと思います。
2 つの無関係なコントロールを取得して、同じカスタム イベントを発生させるにはどうすればよいでしょうか? これまでに見たすべての例では、1 つのコントロール内でイベントが定義されていますが、別のアプローチを取る必要がありますか?
例えば。ボタンとテキスト ボックスの OnFocus ハンドラーからカスタム バブリング イベントを発生させたいと思います。
最初に、あなたの質問では、既存のUIElement.GotFocusEventを使用したくないことを明確にしていないと言わせてください。ただし、それについて知っていて、使用しない理由があると仮定します。
いつでもカスタム イベントを静的クラスに登録し、必要な場所で発生させることができます。Keyboard クラスは、すべてのイベントを処理します (例: 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 フィールドとして所有させたい場合は、所有者を追加する必要があります。
public class MyCustomControl : Control
{
public static readonly RoutedEvent MyCustomEvent = RoutedEventUtility.MyCustomEvent.AddOwner(typeof(MyCustomControl));
}