問題タブ [routed-events]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - たとえば、既に処理されている KeyDown ルーティング イベントを処理しない方法。テキストボックス
KeyDown イベント ハンドラーがアタッチされた WPF のウィンドウがあります。
ユーザーが数字キー (0 ~ 9) を押すと、イベントに応答します。ラジオボタンを選択するためのショートカット キーとして 0 ~ 9 を使用します。例えば。キー 3 を押すと、3 番目のラジオボタンが選択されます。
問題は、ユーザーが TextBox 内の数字キーを押したときに、キープレスをショートカットとして処理したくないということです。TextBox のデフォルトの実装を維持したいからです。
現在、ユーザーが TextBox 内で 3 を押すと、TextBox のテキストは 3 に設定されますが、3 番目のラジオボタンも選択されます。
ユーザーが TextBox 内でキーを押したときに TextBox が e.Handled を true に設定すると思っていましたが、そうではありません。
また、TextBox は単なる例です。ユーザーが階層内の他の入力コントロールに何かを入力した場合、KeyDown イベントに応答したくありません。
これを解決するには、ルーティングされたイベントをよりよく理解する必要があると思いますか、それとも別の方法で解決しますか?
c# - 誰かがWPFでRoutedEventを発生させることはできますか?
C#では、イベントは常に非常に保護されていました。イベントの所有者のみがイベントをトリガーできました。ただし、これはWPFでは完全に異なるようです。誰でもいつでも任意のイベントをスローできます。それをテストするために、私は下部にコードを書きました。
RaiseEventを使用してButton.Clickを発生させたとき、上記のイベントがそれをキャッチしました。それはWPFイベントの計画された動作ですか?誰かに彼らが望むイベントを投げさせるだけですか?また、そうであれば、イベントを登録するときのOwnerTypeの意味は何ですか?ある種の保護だと思いましたが、そうだとすれば、誰でも公開イベントにアクセスし、AddOwner関数を使用して所有者を追加できるため、不十分な保護です。
ありがとう!
XAML
背後にあるコード
カスタムコントロール:
そしてハンドラー:
c# - WPFのクラスリスナーとインスタンスリスナーの違いは何ですか?
私はいくつかのWPF固有のものに頭を悩ませようとしていますが、UIElement.AddHandlerメソッドとEventManager.RegisterClassHandlerメソッドの間の具体的な関係をまだ見つけていません。
私は少しグーグルして、この興味深いMSDNの記事を見つけました:
http://msdn.microsoft.com/en-us/library/ms747183.aspx
ここにそれは述べています:
「ルーティングされたイベントは、クラスリスナーとインスタンスリスナーの2つの異なるタイプのリスナーをイベントに考慮します。クラスリスナーは、タイプが静的コンストラクターで特定のEventManager API、RegisterClassHandlerを呼び出したか、要素ベースからクラスハンドラー仮想メソッドをオーバーライドしたために存在します。クラス。インスタンスリスナーは、AddHandlerの呼び出しによって、ルーティングされたイベントに対して1つ以上のハンドラーがアタッチされている特定のクラスインスタンス/要素です。」
さて、クラスとそのインスタンスの違いはわかっていますが、どういうわけか、ドキュメントのこの特定の部分を理解することはできません。
誰かが私のためにそれを片付けることができますか?
wpf - MouseEnter イベントはバブルできますか?
どんな状況でも MouseEnter イベントがバブリングする可能性はありますか?
MSDN によると、これは直接ルーティング戦略を使用した添付イベントであり、技術的にそのような可能性は排除されています。私はかなり複雑なコントロールを持っています (本質的には、グリッド、スタックパネル、およびコンテンツ コントロールで構成される階層です)。MouseEnter イベントが下から上に伝播されるようです。これは OnMouseEnter ハンドラーから取得したデバッグ ダンプです (MouseEnter を処理する階層のさまざまなレベルに同じカスタム コントロールが含まれているため、そのイベントをリッスンするための中心的な場所があります)。 :
中: 親:s7b、タイムスタンプ:37989609
中: 親:s2、タイムスタンプ:37989609
中: 親:ルート、タイムスタンプ:37989609
s7b、s2、および Root は FrameworkElement の名前で、timestamp は MosueEnter イベントの e.Timestamp です。
ルーティング戦略がダイレクトである場合、WPF はどのようにイベント オリジネーターを決定しますか? MouseEnter イベントが添付された最初の FrameworkElement が見つかるまで、ビジュアル ツリーを走査しますか?
私は問題の最小限の再現セットに取り組んでいますが、動作の原因を誰かが提案できますか?
そして、ここに再現があります:
- 2 つのカスタム コントロールを作成します。1 つは定数コントロール、もう 1 つはイベント レシーバーです。
1.1。MyContentControl
コード:
XAML:
1.2 マウスイベントレシーバー
コード:
XAML:
- 最後に、テスト ハーネスのマークアップ:
XAML:
問題を再現するには、右端の灰色の四角にカーソルを合わせて [デバッグ出力] ウィンドウを確認します。そこには 3 つのエントリが表示されますが、1 つだけを期待しています。
乾杯。
wpf - 値が更新されるたびにWPF TextBlockをスピンさせる方法は?
更新をバインドするたびに TextBlock を 360 度回転させようとしています。
私が読んだすべてのものから、以下はうまくいくはずですが、何の効果もありません。私は何を間違っていますか?
wpf - WPF - カスタム コントロールで IsVisible をオーバーライドする
別のコントロール (テキスト ボックス) をラップするカスタム コントロール (Adorner) があります。
実際のデコレータではなく、子の可視性が変更された場合にのみ MyCustomAdorner のイベントが発生するように、VisibilityChanged をオーバーライドできるようにしたいと考えています。これについてどうすればいいですか?
c# - PreviewMouseDownを処理できません
おい; ユーザーコントロールに次の視覚的な階層があります。
グリッド->キャンバス->MyContentControl
MyContentControlは、ContentControlから派生したクラスで、上部に長方形の装飾があります。これにより、特定のオブジェクトをクリックしやすくなります(ヒットテスト領域が増えます)。装飾者は常に存在しますが、背景は透明です。
ユーザーコントロールのコードビハインドからMyContentControlをクリックしたときにPreviewMouseDownイベントが発生するのを見たいのですが、イベントはそこで発生していないようで、装飾者レベルでのみ発生しているようです。
イベントは装飾者レベルで処理されますが、e.IsHandledがtrueに設定されていないため、バブリングまたはトンネリングを続行する必要があります。私が読んだところによると、PreviewMouseDownはトンネリングであり、IIRCは、最初にユーザーコントロールで発生するはずです。
私は何かが足りないのですか?
ありがとうございました。
wpf - ルートコンテナからTreeViewItemデータコンテキストを取得します
2つの使用コントロールを備えたウィンドウがあります。1つはTreeViewコントロールをカプセル化し、もう1つは選択したTreeViewItemsの詳細の文字列表現です。
TreeViewコントロールはすでに自給自足です-それはそれ自体にコンテンツアイテムを投入します。各TreeViewItemにはデータコンテキストがあります。
これが私が起こる必要があることです:
- ユーザーがアイテムをクリックするたびに、ウィンドウのルートコンテナでキャッチされているSelectedroutedイベントが生成されます。
- 選択されたTreeViewItemのデータコンテキストからデータ(プロパティ値)を取得できるように、Selectedroutedイベントを処理するイベントハンドラーが必要です。
- この値に基づいて、イベントハンドラーはDetailsViewコントロールを作成し、データを入力します。
選択したイベントの処理に関して、私のアプローチは正しいですか?選択したアイテムのデータコンテキストからプロパティ値を取得するにはどうすればよいですか?
ありがとうございました。
c# - WPFでのMouseEnterおよびMouseLeave処理(VS2008および.net 3.5を使用)が期待どおりに機能しない
画像やコードなしで問題を説明するのは簡単ではありません。興味のある方のために、 http://rapidshare.com/files/461745095/02.WPFControlEvents.rarからダウンロードできるサンプルC#/WPFプロジェクトを作成しました。
非常に小さなプロジェクト(45KB)です。問題は次のとおりです(ゆがんだ説明についてお詫びします):
「派手な」(そしてかなり醜い)ボタンには、1。)ラベル、2。)キャンバス、3。)2つの同心楕円がすべて左から右に配置されたスタックパネルが含まれています。
スタックパネル用のMouseEnterおよびMouseLeaveイベントハンドラーがあり、マウスがスタックパネルの上にあるか外側にあるかを示すメッセージをタイトルバーに表示します。
問題は、マウスがラベルの上にあるとき(スタックパネルに含まれているとき)、マウスがスタックパネルの上にあると(正しく)報告されることです。マウスをキャンバス(スタックパネルにも含まれています)上に移動すると、マウスは(誤って?)スタックパネル上にないことが報告されますが、マウスを少し右に移動すると(2つの楕円上) 、キャンバス上にあります)、マウスは再びスタックパネル上にあると報告されます。
マウスがキャンバス上にあるときはスタックパネル上にないと報告されるのに、マウスが楕円(キャンバスにペイントされている)の上にあるときはスタックパネル上にあると報告されるのはなぜですか?
問題に光を当ててくれてありがとう、
ジョン。
wpf - WPF 依存関係プロパティの回避策
MainWindow の下に 3 つの UserControls があります。各コントロールには、独自の保存ボタンがあります。Mainwindow には SaveAll ボタンがあります。
MainWindow には ContentControl があり、コンテンツ プロパティは VM にバインドされています。ButtonClickCommand の実行時に、ビューがインスタンス化され、コンテンツ プロパティに割り当てられます。
この SaveAll ボタンは、UserControls Save ボタンに関連付けられたメソッドを内部的に呼び出します。そのため、SaveAll には独自のメソッドがありません。
これは、DependencyProperty によって実装する必要があります。
このシナリオがビジネス アプリに実装されているのを見たことがありますが、どういうわけかその背後にある概念を見逃していました。
この背後にあるロジックはわかりませんが、非常に便利なことです。
今、私はこれを実装する必要がありますが、私は知らない小さなことを見逃しています.
シナリオが明確であることを願っています。
コードを使用して、このシナリオで私を助けてください。
ありがとう、VJ