7

2 つの無関係なコントロールを取得して、同じカスタム イベントを発生させるにはどうすればよいでしょうか? これまでに見たすべての例では、1 つのコントロール内でイベントが定義されていますが、別のアプローチを取る必要がありますか?

例えば。ボタンとテキスト ボックスの OnFocus ハンドラーからカスタム バブリング イベントを発生させたいと思います。

4

1 に答える 1

8

最初に、あなたの質問では、既存の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));
}
于 2008-11-10T04:43:42.893 に答える