問題タブ [routed-commands]
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.
wpf - ビュー内で RoutedCommand の実行をインターセプトする方法は?
Cursors.Wait
WPF / MVVM アプリケーションでは、長い操作の前にメイン ビュー カーソルを設定し、完了後にデフォルト カーソルに戻すコード効率の良い方法を見つけようとしています。
すべての操作はルーティングされたコマンドを使用して呼び出されるため、理想的には組み込みのルーティングされたコマンドのインスタンスをラップする汎用コマンド クラスを作成することによって、コマンドの実行をインターセプトする方法を見つけたいのですが、その方法を視覚化することはできません。これ。
具体的には、RoutedCommand.Execute
メソッドは仮想ではないため、その呼び出しをインターセプトする別のメカニズムが必要です。また、ジェネリック コマンド クラスのインスタンスが、カーソルを設定する必要があるビューをどのように参照するのかわかりません。
アドバイスをお願いします。
wpf - RoutedCommand.CanExecuteChangedイベントがElementHost内で一貫して発生しない
(背景:WinFormsアプリを段階的にWPFに移植しています。現時点では、WPFコンテンツを含むElementHostを含むWinFormsメインフォームがまだあります。)
Cut、Copy、Pasteなどの特定のApplicationCommandが.CanExecuteの値を変更したときに、アプリに通知を受け取りたいのですが。ApplicationCommands.Cut.CanExecuteChangedのようなグローバルイベントをサブスクライブするのは簡単なことだと思いましたが、一貫して呼び出されていないように見える奇妙な動作に気づいています。
たとえば、ElementHostだけを含む単純化されたWinFormsテストアプリを作成しました。次に、WPFテキストボックスを追加し、CanExecuteChangedハンドラーを添付しました。
奇妙なことに、テキストボックスでテキストを選択するなどの操作を行うと、インラインラムダ/デリゲートを使用するハンドラーが呼び出されます。ただし、インスタンスメソッドを使用してサブスクライブするものは呼び出されません。
さらに、より複雑なアプリケーションでは、ハンドラーにインラインデリゲートを使用している場合でも、CanExecuteがまったく呼び出されません。
wpf - CanExcuteイベントはいつCommandSourceによって発生しますか
CanExecuteイベントは、 ICommandSourceインターフェイスを実現するコントロールによって理想的に発生するのはいつですか。ハンドラーにブレークポイントを追加して、ハンドラーがいつ発生するかを確認しようとしましたが、コントロールが画面に表示されるたびに実行されるようです。誰かがそれがいつ正確に上げられるのか、そしてそれを自由に上げる方法を説明できますか?
wpf - タブごとのバインディングを使用したWPFルーティングコマンド
現在のタブが変更されたときのTabItem内のボタンと同じように、TabControlの外のボタンを無効および有効にするつもりでした。ただし、TabItemのCommandBindingsは、ビジュアルツリーの「上」に影響を与えないようです。これを行う正しい方法は何ですか?
このXAMLの場合:
このコードの背後にあるもの:
wpf - Caliburnを使用してRoutedCommandsにバインドできますか?
CaliburnでWPFの組み込みRoutedCommandsを使用するための最良の方法は何ですか?
たとえば、私のシェルには、次の場所にある標準コマンドに添付されたコピー項目を含む編集メニューがありますApplicationCommands
。
このアイテムは、フォーカスがある場合はaで処理されTextBox
、フォーカスがある場合は自分のコントロールで処理されるようにします。私のコントロールでは、 :を作成することExecute
でCanExecute
、コードビハインドで処理できます。CommandBinding
Caliburnを使用して、代わりにViewModelのメソッドを処理する方法、またはViewModelから公開する別のコマンドにリダイレクトする方法はありますか?それとも私はこれを間違った方法で行っていますか?
c# - WPF で ICommandSource を実装して、xaml からコマンドを使用するカスタム コントロール機能を提供するにはどうすればよいですか?
ICommandSource
インターフェイスの実装方法のサンプルを提供してください。UserControl
xaml でコマンドを指定する機能を持たない に、この機能を持たせたいと思っています。また、ユーザーが をクリックしたときにコマンドを処理できるようにしますCustomControl
。
c# - RoutedEvent の宛先を見つける
ルーティングされたコマンドを実行すると、次のようになります。
WPF はいくつかの魔法をCommandBinding
実行して、ExecutedRoutedEventHandler
.
CommandBinding
実行される (または少なくともハンドラーへの)参照を取得する方法はありますか?
誰がコマンドを処理しているかを知ることがデバッグに役立つ場合があります。
wpf - WPF アーキテクチャの混乱 RE: ルーティングされたコマンド、イベント、およびジェスチャー
WPF を学ぶにあたって、私はたくさんの本や Web サイトを読んできました。私を回避し続けているように見えることの 1 つは、RoutedCommands を適切に接続する方法です。ある記事で、作成者は、XAML ファイルの分離コードには InitializeComponent の呼び出しだけを含める必要があると指摘しました。私はそれを後回しにすることができます。これにより、XAML ファイルは単なるプレゼンテーション ドキュメントに過ぎず、懸念事項の分離に対する私の不浄な渇望が満たされます。
一方、ダブルクリック イベントに対処するサンプルはどれも、コードを書く必要があるようです。コードビハインド ファイルに反復的なコードを含めることから逃れたいというのが私の理解でした (繰り返しますが、私はそれで大賛成です)。メニュー コマンド、ツールバー ボタンのクリックなどについても同様です。
たとえば、ドキュメントを開くコマンドがあるとします。そのコマンドは、[開く] ダイアログを表示してから、ドキュメントを開いてアプリケーション状態にキャッシュする必要があります。(このアプリケーションでは、一度に 1 つのドキュメントでしか作業できません。) ユーザーは、次のいずれかの方法でこのコマンドを呼び出すことができます。
- メニューから [ファイル] → [開く] を選択します。
- Ctrl+O を入力します。
- ツールバーの [開く] ボタンをクリックします。
Web 上のほとんどのソースを信頼する場合、少なくとも 2 つの Click イベント ハンドラーを記述してコマンドを呼び出し、コード ビハインド ファイルを汚染する必要があります。私には、コマンドを持つ目的を無効にするように思えます。XAMLでコマンドをこれらのものに宣言的にバインドする方法があり、実行できない場合はコマンドを無効にすることさえできるとどこかで読んだと思いました。しかし、今はそれを見つけることができないようであり、それを行う方法の適切な例でもありません。
誰かが私にこれを説明してもらえますか? この時点で、すべてがブードゥー教と榴散弾のように見え始めています。
mvvm - RoutedCommandでうまく機能するMVVMフレームワークはありますか?
RoutedCommandとRoutedUICommandには多くの利点があります。テキストとキーボードジェスチャのサポートが組み込まれています。RoutedUICommandsのコレクションをMenuのItemsSourceにバインドすると、メニュー項目が自動的に作成されてバインドされます。一部のコマンド(切り取り、コピー、貼り付け)は、すぐに使用できるコントロールによって自動的にサポートされます。
ただし、MVVMを使用するときはいつでも、ボイラープレートXAMLとコードビハインドが繰り返されるため、ルーティングされたコマンドは適切ではないことがわかりました。MVVMを実行しているときは、通常、ルーティングされたコマンドの代わりにRelayCommandを使用することになります。これは、適切な回避策である場合もありますが、欠点があります。たとえば、キージェスチャがはるかに複雑になります。
しかし、Rob Eisenbergの「独自のMVVMフレームワークを構築する」セッションを見た後、リレーコマンドとその欠点に満足できなくなりました。ルーティングされたコマンドの唯一の問題は反復的なボイラープレートコードでした。その反復的なコードをフレームワークに組み込み、規則を適用すると、MVVMでルーティングされたコマンドを使用しない理由はなくなったようです。
技術的には、これは難しいことではないようです。フレームワークは、ビューのCommandManager.CanExecuteイベントとExecutedイベントにバインドし、規則を適用してViewModelのメソッドとプロパティを探す必要があります。たとえば、Cutコマンドを実行するときは、ExecuteCutメソッド(およびCanExecuteCutプロパティ)を探します。 )ViewModelで。これを簡単にする独自のMVVMフレームワークを構築できました。
しかし、私の質問は、RoutedCommandで動作するMVVMフレームワークはすでにありますか?私が深く知っている唯一のMVVMフレームワークはCaliburn.Microであり、現在この方法でルーティングされたコマンドをサポートしていません(これは、独自のアクションバブリングのフレーバーをサポートしているため、私を驚かせます)。
wpf - WPFコマンドの問題
コマンドを実行できるのに、コマンド制御が常に無効になっているのはなぜですか?コマンドもで実行されますAlt + F4