UIElement.OnPreviewMouseDown(MouseButtonEventArgs) メソッド


未処理の PreviewMouseDown 添付ルーティング イベントが、そのルート上で、このクラスから派生した要素に到達すると呼び出されます。Invoked when an unhandled PreviewMouseDown attached routed event reaches an element in its route that is derived from this class. このイベントに対するクラス処理を追加するには、このメソッドを実装します。Implement this method to add class handling for this event.

 virtual void OnPreviewMouseDown(System::Windows::Input::MouseButtonEventArgs ^ e);
protected virtual void OnPreviewMouseDown (System.Windows.Input.MouseButtonEventArgs e);
abstract member OnPreviewMouseDown : System.Windows.Input.MouseButtonEventArgs -> unit
override this.OnPreviewMouseDown : System.Windows.Input.MouseButtonEventArgs -> unit
Protected Overridable Sub OnPreviewMouseDown (e As MouseButtonEventArgs)



イベント データを格納している MouseButtonEventArgsThe MouseButtonEventArgs that contains the event data. このイベント データは、1 つ以上のマウス ボタンが押されたことを報告します。The event data reports that one or more mouse buttons were pressed.


マウスボタンの操作も、専用の入力マネージャーによって処理されます。Mouse button actions are also handled by a dedicated input manager. 入力バインドやコマンドバインドなど、マウスボタンの操作に依存するその他のプログラミング機能では、一般的なマウスボタン操作として公開される前に、アクションのハンドラーが呼び出されることがあります。Other programming features that rely on mouse button actions, such as input and command bindings, might invoke handlers for the action before it is exposed as a general mouse button action. これらの入力システム機能によっ Mouse.PreviewMouseDown てイベントが処理済みとしてマークされている場合、 OnPreviewMouseDown は呼び出されません。If these input system features mark the Mouse.PreviewMouseDown event as handled, OnPreviewMouseDown is not invoked.

このクラスハンドラーを使用してイベントを処理済みとしてマークすると、との各イベントに影響する可能性があり PreviewMouseLeftButtonDown PreviewMouseRightButtonDown ます。If you use this class handler to mark the event as handled, you potentially impact the following events: PreviewMouseLeftButtonDown and PreviewMouseRightButtonDown. これらのイベントのいずれかは、の受信時に受信側の要素で発生する可能性があり Mouse.PreviewMouseDown ます。Either of these events may be raised on the receiving element when Mouse.PreviewMouseDown is received.

このイベントをクラス処理で処理済みとしてマークした場合、subevents は依然として発生します。ただし、処理された状態はイベントデータに渡されます。If you mark this event as handled in class handling, subevents are still raised; however, they pass the handled state in the event data. イベントがクラス処理で処理される場合、 AddHandler(RoutedEvent, Delegate, Boolean) handledEventsToo true ハンドラーをアタッチするためにを明示的に使用しない限り、subevents のインスタンスハンドラーは呼び出されません。If the event is handled in class handling, instance handlers for the subevents are not invoked unless you explicitly use AddHandler(RoutedEvent, Delegate, Boolean) with handledEventsToo true in order to attach handlers. クラスハンドラーは、でシグネチャに登録されていない限り、呼び出されません RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean) handledEventsToo trueClass handlers also are not invoked unless those class handlers were registered with the RegisterClassHandler(Type, RoutedEvent, Delegate, Boolean) signature with handledEventsToo true. を処理 OnPreviewMouseDown することで、すべてのマウスボタンのダウンアクションをクラスの処理に反映させることができます。By handling OnPreviewMouseDown, you are implying that your class handling accounted for all possible mouse button down actions. この動作は望ましくない可能性があります。このため、この仮想メソッドを使用してイベントを処理済みとしてマークする場合は注意が必要です。This behavior might be unwanted; Therefore, use caution when you use this virtual method to mark events as handled.

ボタン固有の各ダイレクトイベントには、virtual On * メソッドもあります。これらのボタン固有のクラスハンドラーをオーバーライドする方が適しているかどうかを検討してください。Each of the button-specific direct events also has a virtual On* method; consider whether overriding these button-specific class handlers might be more appropriate.

このメソッドには既定の実装がありません。This method has no default implementation. 継承の中間クラスはこのメソッドを実装する可能性があるため、実装で基本実装を呼び出すことをお勧めします。Because an intermediate class in the inheritance might implement this method, we recommend that you call the base implementation in your implementation.

このメソッドの目的は、* メソッドの共通言語ランタイム (CLR) イベントパターンに似ています。このメソッドは、インスタンスハンドラーではなくクラスハンドラーを確立することによって、派生クラスから一致するイベントを処理する手段を提供します。The purpose of this method is similar to the common language runtime (CLR) event pattern On* methods: this method provides the means to handle the matching event from derived classes by establishing a class handler instead of an instance handler. この場合、一致イベントはルーティングイベントです。In this case the matching event is a routed event. On * メソッドの実装パターンは、ルーティングイベントによって異なります。これは、ルーティングイベントは子要素によって発生する可能性があるためです。これは、必ずしもハンドラーを呼び出す要素ではありません。The implementation pattern of the On* methods is different for routed events because a routed event can be raised by a child element, which is not necessarily the element that will invoke handlers. そのため、実装では、イベントデータのソースプロパティを調べる必要があります。Therefore, your implementation needs to examine the source properties of the event data. ほとんどの場合、イベントを reraise しないようにしてください。It should not try to reraise the event in most cases.

このメソッドをオーバーライドするか、を使用してクラスハンドラーを登録することにより RegisterClassHandler 、の派生クラスは、イベント UIElement がイベントルートに沿って受信されたときにプライベートクラスハンドラーメソッドを呼び出すことができます。Either by overriding this method or by registering class handlers with RegisterClassHandler, derived classes of UIElement can call private class handler methods when the event is received along the event route. クラス処理が適切なシナリオの1つは、イベントデータを操作し、ルーティングイベントを処理済みとしてマークすることです。One scenario where class handling is appropriate is to manipulate the event data and mark the routed event as handled. プレビューイベント専用のもう1つのシナリオは、対応するバブルクラスハンドラーが呼び出されないように、それらを処理済みとしてマークすることです。Another scenario that is specifically for Preview events is to mark them handled so that the matching bubbling class handlers are not invoked.