問題タブ [routedevent]
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.
events - ユーザー コントロール内からカスタム ルーティング イベントが発生したときに、CallMethodAction を使用してビューモデル内のメソッドを呼び出すにはどうすればよいですか?
ルーティング イベントが登録された UserControl があります。
次のように、ユーザー コントロールからこのルーティング イベントを発生させます。
このユーザーコントロールをメインビュー内に次のように埋め込みます。
このイベントが発生したときに Viewmodel からメソッドを呼び出して、カスタム ルーティング イベントを処理したいと考えています。
私は最初にこれを試しました:
ただし、ハンドラー メソッド (VisualChartRangeChanged) が Viewmodel ではなく View に配置されるため、MVVM に逆らう必要があります。
次に、これを試しました:
しかし、イベント ハンドラー メソッド (MyMethod) は呼び出されていません。
誰かがこれがどのように行われるかの例を提供できますか?
ありがとう。
編集済み
そこで、次のようにコードを修正しました。
これを見るだけでなく、http://i.stack.imgur.com/xR9DY.jpg
しかし、表示された通知にもかかわらずコンパイルされても、次の内部例外が発生します。
{"'ChartBehavior.OnVisualChartRangeChanged' は、プロパティ 'EventName' の有効な値ではありません。"}
メイン ビューのビューモデルでハンドラー メソッドを呼び出して、ユーザー コントロールからルーティング イベントを処理するためのより良い方法はありますか?
c# - ViewModelからViewでトリガーを適切に実行するには?
ViewModel でイベントを発生させた後、View でアクションを実行したいと考えています。ここで解決策を見つけましたが、かなり複雑なようです。組み込みのメカニズムはありませんか?ViewModel で RoutedEvent を発生させることについても読んだことがありますが、このアプローチでは ViewModel がレシーバーのタイプを知る必要があります - MVVM パターンに準拠していますか?
編集 :
具体的には、ViewModel から以下のアニメーションを実行する必要があります。
最初は page.triggers で eventTrigger を定義することを思いつきましたが、routedEvent が必要です。何か提案はありますか?
wpf - TextBox で PreviewKeyDown をオーバーライドする方法は?
作成したコントロール内の TextBox に PreviewKeyDown イベントのハンドラーがあり、ユーザーが下向きのキーを押したかどうかを確認します。コントロールがグリッドのようなレイアウト コンテナー内にある場合、イベント ハンドラーはキーの押下を正しく処理します。しかし、DataGrid の DataGridTempalteColumn 内にコントロールを配置すると、コントロールは必要なことを実行しません。
問題は、PreviewKeyDown がトンネリング戦略にあるため、ホスト DataGrid が下矢印キーの押下をコントロールする前に処理できることだと思います。下矢印の場合、DataGrid はフォーカスを次の行に移動します。イベントが最終的に私のコントロールに到達するため、DataGrid は IsHandled を true に設定していないようですが、それでもイベントに対して独自の処理を行うため、問題が発生します。
問題は実際には DataGrid にあるのではなく、コントロールに TextBox からのトンネリング PreviewKeyDown イベントがあるという事実にあります。TextBox でこのデフォルト イベントをオーバーライドする方法を探しています。おそらく、添付された動作でできることはありますか? 多分私は TextBox から継承してからオーバーライドする必要がありますか? これまでのところ、このような状況に対処する方法を示すものは何も見つかりませんでした.
以下は、回答が得られなかったこの質問の元のテキストです
DataGridTemplateColumn で DataTemplate として作成したカスタム オートコンプリート テキスト ボックスの使用に問題があります。
actextbox クラスはユーザー コントロールから派生し、特定のキーの押下に応答するイベント ハンドラーを持っています。
その意図は、オートコンプリート ポップアップが表示されたときに、ユーザーがその内容をナビゲートできるようにすることです。これは、コントロールがレイアウト コンテナーの階層に配置されている場合に期待どおりに機能します。ただし、データグリッド内のセルの一部である場合、期待される動作は失われます。下矢印または上矢印の独自の解釈を適用するために DataGrid によって previewKeyDown が使用されているように見えますが、イベントが処理済みとして設定されていない間、イベントがコントロール フォーカスに到達するまでにフォーカスが失われ、別の行が選択されました。
私はオンラインで全体を見てきましたが、これを処理する方法についての手がかりを見つけることができませんでした. 確かに、DataGridTemplateColumns 内のコントロールがあらゆる種類の入力を処理するのを見てきましたが、これをどのように達成するかはわかりません。
wpf - PreviewMouseLeftButtonDownEvent の Handled プロパティが ClickEvent に影響するのはなぜですか?
ボタンに ClickEvent- および PreviewMouseLeftButtonDown-Handler を追加することを検討してください
ボタンをクリックすると、最初に PreviewMouseLeftButtonDown が発生し、次に Click-Event が発生します。
Preview...-Event で設定e.Handled = true
すると、Click-Event は処理されなくなります。
しかし、今度は MouseLeftButtonDownEvent について考えてみましょう。
まず、このイベントのルーティング戦略は直接的です。つまり、コントロールごとに再発生します。対照的に、Preview...-Event はトンネリングで、Click-Event はバブリングです。
次に、MouseLeftButtonDownEventHandler の追加は、次のコードの抜粋に示すように、既に処理されたイベントに対しても呼び出されるようにハンドラーを登録する場合にのみ成功します。
ボタンを持つテスト アプリケーションを作成し、各イベントのハンドラーを追加しました。イベント ハンドラーが呼び出されると、いくつかの情報がテキスト ブロックに書き込まれます。
- ボタンをクリックすると、3 つのイベント ハンドラーがすべて呼び出されます。
e.Handled = true
Preview...-EventHandlerに追加すると、このイベント ハンドラーのみが呼び出されます。trueに設定しましたが、Mouse...-EventHandler も発生しませんUIElement.AddHandler handledEventsToo
。- Mouse...-EventHandlerに追加
e.Handled = true
すると、3 つのイベント ハンドラーがすべて呼び出されます。
それは私には意味がありません。Mouse...-EventHandlers は Click-EventHandlers には影響しませんが、Preview...-EventHandlers は Mouse...- と Click-EventHandlers の両方に影響します。
そして、イベントを処理するための「強制」でさえ、Mouse...-EventHandler では失敗しました。
実際、異なるタイプのイベント ハンドラーが互いに影響を与える可能性があるとは考えもしませんでした。私が理解したのは、Preview...-Event と Click-Event がある場合、これらは独立しているということです。
それで、私は何が欠けていますか?
非常に単純なサンプルコードは次のとおりです。
XAML:
コード ビハインド:
c# - WPF RoutedEventHandler がコンテンツで機能しない
c# WPF routedevent に問題があります。このコードは正常に動作します:
しかし、myLabel を ToggleButton のコンテンツに配置すると、routedeventhandler(myLabel_Click) は Oma イベントをキャッチしません (デバッグしました):
では、なぜ ToggleButton が routedevent をブロックするのでしょうか?
編集: コードは正常に動作しますが、myLabel を ToggleButton のコンテンツに入れると問題が発生します。
MyLabel の OmaEvent は次のようになります。
ToggleButton 内に配置すると、OmaEvent が発生することはありません。ToggleButton 内に配置しないと、機能します。
wpf - WPF は Thumb でダブルクリック イベントを処理し、別のコントロールで新しいイベントとして発生させます
運の悪い振る舞いでやってみた
行動:
XAML:
どんな助けでも大歓迎
wpf - F# のカスタム ルーティング イベント
この C# コードを翻訳しようとしています。これまでの私の試み:
MainWindow.xaml
ボタンをクリックしてもアニメーションは開始されません。
コードRoutedEvent="funk:MyButtonSimple.Tap"
を次のように変更するとRoutedEvent="GotFocus"
、実際の例が得られます (Button.Click はオーバーライドされます)。
私が間違っていることはありますか?