WPF カスタム トンネル ルートイベントを作成するにはどうすればよいですか?
-
19-09-2019 - |
質問
親コントロールから子コントロールへトンネリングする Tunnel Routed Event の簡単な例が必要です。
(これは ない 実際のコード) -- 実際、深く行けば行くほど、XAML が間違っていると思います。おそらく、子ノード上の XAML でトンネルされたイベントにサインアップすべきではありません (確信はありませんか?)
<PARENT>
<MyControl DoSomethingOnUserAction="raiseTunnelEvent"> HELP </MyControl >
<CHILD> I SHOULD HANDLE tunnelled event </CHILD>
</PARENT>
シンプルで簡潔な例が役立つでしょう。
ありがとう、アラン
解決
よくわかりませんが、猫に吠えてもらいたいのかもしれません。
Button の RoutedEvent ClickEvent (PresentationFramework から) は次のように宣言されます。
public static readonly RoutedEvent ClickEvent =
EventManager.RegisterRoutedEvent("Click",
RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof
(ButtonBase));
注意してください readonly
RoutingStrategy
の Bubble
.
以下は、トンネル、バブル、ダイレクトを理解するのに役立ちます。msdn.microsoft.com/en-us/library/system.windows.routingstrategy.aspx
これで残りの作業は完了します。msdn.microsoft.com/en-us/magazine/cc785480.aspx
先端:規約により、WPF のトンネリング イベントは「Preview」で始まります (例: 「PreviewExplode」)。イベントが「Preview」で始まらない場合は、おそらくトンネル RoutingStrategy が使用されません。また、通常は、「PreviewExplode」に続いて「Explode」のように、最初にトンネルが発火し、次にバブルが発火する、トンネルとバブルのペアが表示されます。
Button's Click トンネルが必要な場合は、次のことを検討してください。
- PreviewMouseDown を使用する (もちろん同じではありません。すべてのマウス ダウンがクリックになるわけではないため、おそらく危険です)。
- PreviewClick を発生させてから Click を発生させる TunnelButton を作成します。
他のヒント
149ページ、私は、Visual Studio 2008でのアクションでWPFを持って本をめくり、RoutedEventsは、親ノードにし、ルーティングイベントは、子ノードにトンネリングしていること上昇させることができることを示していると思われる非常に誤解を招くような図を持っています。
これはケースではないと判明...半日が吹きB /悪いの図のC(かなり良い本そうでない場合は)[ISBN:1-933988-22-3]