EventManager.RegisterClassHandler メソッド

定義

特定のルーティング イベントのクラス ハンドラーを登録します。

オーバーロード

RegisterClassHandler(Type, RoutedEvent, Delegate)

特定のルーティング イベントのクラス ハンドラーを登録します。

RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean)

イベント データが既に処理済みとしてマークされているイベントを処理するオプションを使用して、特定のルーティング イベントのクラス ハンドラーを登録します。

RegisterClassHandler(Type, RoutedEvent, Delegate)

特定のルーティング イベントのクラス ハンドラーを登録します。

public:
 static void RegisterClassHandler(Type ^ classType, System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler);
public static void RegisterClassHandler (Type classType, System.Windows.RoutedEvent routedEvent, Delegate handler);
static member RegisterClassHandler : Type * System.Windows.RoutedEvent * Delegate -> unit
Public Shared Sub RegisterClassHandler (classType As Type, routedEvent As RoutedEvent, handler As Delegate)

パラメーター

classType
Type

クラスの処理を宣言するクラスの型。

routedEvent
RoutedEvent

処理するイベントのルーティング イベント識別子。

handler
Delegate

クラス ハンドラー実装への参照。

次の例では、呼び出しRegisterClassHandlerのハンドラーをPreviewMouseLeftButtonDown追加します。

static MyEditContainer()
{
  EventManager.RegisterClassHandler(typeof(MyEditContainer), PreviewMouseRightButtonDownEvent, new RoutedEventHandler(LocalOnMouseRightButtonDown));
}
internal static void LocalOnMouseRightButtonDown(object sender, RoutedEventArgs e)
{
  MessageBox.Show("this is invoked before the On* class handler on UIElement");
  //e.Handled = true; //uncommenting this would cause ONLY the subclass' class handler to respond
}
Shared Sub New()
  EventManager.RegisterClassHandler(GetType(MyEditContainer), PreviewMouseRightButtonDownEvent, New RoutedEventHandler(AddressOf LocalOnMouseRightButtonDown))
End Sub
Friend Shared Sub LocalOnMouseRightButtonDown(ByVal sender As Object, ByVal e As RoutedEventArgs)
  MessageBox.Show("this is invoked before the On* class handler on UIElement")
  'e.Handled = True //uncommenting this would cause ONLY the subclass' class handler to respond
End Sub

注釈

クラス処理は、ルーティング イベントのバッキングで実装される添付イベントを含む、ルーティング イベントで使用できる機能です。 クラス ハンドラーは、クラスのすべてのインスタンスに存在する静的ハンドラーに似ています。 ハンドラーは静的であるため、クラス ハンドラーを使用してインスタンス プロパティを直接変更することはできませんが、パラメーターやイベント データを使用して sender インスタンスにアクセスできます。

クラス ハンドラーは、インスタンス ハンドラーの前に呼び出されます。 イベントを処理済みとしてマークする動作を持つクラス ハンドラーを実装できます。 そのため、クラス処理イベントのインスタンス ハンドラーは、インスタンス ハンドラーが処理済みイベント専用に登録しない限り呼び出されません。

WPF 基本要素イベントの多くは、仮想メソッドを処理するクラスを提供します。 基底クラスを継承するクラスでこれらのメソッドをオーバーライドすることで、静的コンストラクターで呼び出 RegisterClassHandler さずにクラス処理を実装できます。 通常、これらのクラス処理メソッドは入力イベントに存在し、名前は "On" で始まり、クラスで処理されるイベントの名前で終わる名前を持ちます。

クラス処理の詳細については、「 ルーティング イベントを処理済みとしてマークする」および「クラス処理」を参照してください。

このシグネチャを使用すると、未処理のイベントに応答してのみ呼び出すクラス ハンドラーが登録されます。 イベント引数が処理済みとしてマークされている場合でも、呼び出すクラス ハンドラーを登録するには、シグネチャを RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean) 使用して 、 handledEventsToo に設定 trueします。

適用対象

RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean)

イベント データが既に処理済みとしてマークされているイベントを処理するオプションを使用して、特定のルーティング イベントのクラス ハンドラーを登録します。

public:
 static void RegisterClassHandler(Type ^ classType, System::Windows::RoutedEvent ^ routedEvent, Delegate ^ handler, bool handledEventsToo);
public static void RegisterClassHandler (Type classType, System.Windows.RoutedEvent routedEvent, Delegate handler, bool handledEventsToo);
static member RegisterClassHandler : Type * System.Windows.RoutedEvent * Delegate * bool -> unit
Public Shared Sub RegisterClassHandler (classType As Type, routedEvent As RoutedEvent, handler As Delegate, handledEventsToo As Boolean)

パラメーター

classType
Type

クラスの処理を宣言するクラスの型。

routedEvent
RoutedEvent

処理するイベントのルーティング イベント識別子。

handler
Delegate

クラス ハンドラー実装への参照。

handledEventsToo
Boolean

ルーティング イベントの引数が既に処理済みとしてマークされていても、このクラス ハンドラーを呼び出す場合は true。処理済みとしてマークされているイベントのハンドラーを呼び出さない、既定の動作を維持する場合は false

注釈

クラス処理は、ルーティング イベントのバッキングで実装される添付イベントを含む、ルーティング イベントで使用できる機能です。 クラス ハンドラーは、クラスのすべてのインスタンスに存在する静的ハンドラーに似ています。 ハンドラーは静的であるため、クラス ハンドラーを使用してインスタンス プロパティを直接変更することはできませんが、パラメーターやイベント データを使用して sender インスタンスにアクセスできます。

クラス ハンドラーは、インスタンス ハンドラーの前に呼び出されます。 イベントを処理済みとしてマークする動作を持つクラス ハンドラーを実装できます。 そのため、クラス処理イベントのインスタンス ハンドラーは、インスタンス ハンドラーが処理済みイベント専用に登録しない限り呼び出されません。

WPF 基本要素イベントの多くは、仮想メソッドを処理するクラスを提供します。 基底クラスを継承するクラスでこれらのメソッドをオーバーライドすることで、静的コンストラクターで呼び出 RegisterClassHandler さずにクラス処理を実装できます。 通常、これらのクラス処理メソッドは入力イベントに存在し、名前は "On" で始まり、クラスで処理されるイベントの名前で終わる名前を持ちます。

クラス処理の詳細については、「 ルーティング イベントを処理済みとしてマークする」および「クラス処理」を参照してください。

このシグネチャを使用すると、クラス ハンドラーを登録して、処理されたイベントに対してhandledEventsToo``true呼び出すことができます。 通常、これは、マウスまたはキーボード イベントからの入力システムの処理など、回避しようとしている既知の処理の問題がある場合にのみ行う必要があります。

適用対象