うまくいかない理由:
PointerRoutedEventArgs
プロパティを持っています。いずれかがこれを true としてマークした場合、イベント ハンドラー チェーンはそれ以上進行しません。Handled
bool
PointerEventHandler
Handled
ここで、コントロールの設計者は何らかの明白な理由でイベントRichEditBox
をフックする必要があり、ハンドラーでを true にマークしたに違いありません。その結果、イベントに追加したハンドラーは呼び出されません。PointerReleased
Handled
これは、他のコントロールでも発生します。例: 次のように、単に an を追加するだけPointerWheelChanged
では、a のイベントをフックすることはできません。ScrollViewer
EventHandler
myScrollViewer.PointerWheelChanged += Some_Handler;
ハンドラーが追加されますが、同じ理由で呼び出されません。
解決:
すべてUIElement
の にAddHandlerメソッドがあります。EventHandler
このメソッドも、オペレーターと同様にイベントに s を追加し+=
ますが、次のことができるという利点があります。
イベントが他の場所で処理される場合でも、指定されたハンドラーを呼び出す
だから、あなたがすべきことは、次のようなものです:
RebText.AddHandler(RichEditBox.PointerReleasedEvent, new PointerEventHandler(RebText_PointerReleased), true);
そして次のように定義しますRebText_PointerReleased
:
private void RebText_PointerReleased(object sender, PointerRoutedEventArgs e)
{
// your event handling code here
}
3 番目の引数は、イベントが処理済みとしてマークされている場合でも、このハンドラーを呼び出すことを指定した場所です。
注:、既に処理されたイベントを処理することはお勧めできません。ドキュメントにあるように:
コントロール合成用の Windows ランタイム イベント システムの意図した設計に干渉するため、ルーティング イベントの再処理を定期的に要求しないでください。