問題タブ [routedcommand]

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.

0 投票する
0 に答える
396 参照

c# - WPF 押されたキーをコマンド ハンドラーに渡す

次の動作が必要です。

  • Ctrl + 1 を押すと、リストから最初の項目が選択されます
  • Ctrl + 2 は最初の 2 つの要素を選択します
  • 等々。

現在、押されたキーは RoutedEvent、Window.CommandBindings、および InputGesture で処理しています。正常に動作しますが、ほぼ同じコマンドが 10 個あります (1,2,3...9,0)。より良い方法はありますか?例:押されたキーを CommandBinding.Executed に送信

私のコードのサンプル:

0 投票する
1 に答える
920 参照

c# - wpf ツールバーの非アクティブなコマンド

ツールバー (追加および削除コマンド) と TabControl を備えたアプリケーションがあります。TabControl の各 tabItem に VariableGrid コントロールがあります。

画像を見てください:http://trueimages.ru/view/cNFyf

ツールバー コマンドは、私のコントロールに実装されています。

ツールバーのコマンドが無効になっているケースはほとんどありません:

  1. アプリケーションの実行時
  2. DataGrid の灰色のフィールドをクリックすると
  3. DataGrid が空の場合

DataGrid の任意の行が選択されると、ツールバーのコマンドがアクティブになります。

私の問題で私を助けてもらえますか? ツールバー ボタンのどの CommandTarget を設定すればよいですか?

PS: 私のアプリケーションには 2 つの VariableGrid があります。CommandTarget を "{Binding ElementName=variableGrid}" として設定できないのはそのためです。FocusedElement に設定する必要があると思います。しかし、これを行う方法がわかりません。

0 投票する
2 に答える
726 参照

wpf - WPF: ContentControl 内にネストされた UserControl に実装されたトリガー RoutedCommands

ContentControl 内にネストされた UserControl 内に実装されたルーティング コマンドをトリガーするにはどうすればよいですか?

私が基本的に持っているのは、次を含む外部ビュー(UserControlから派生)です。

1) コマンド MyCommand をトリガーするボタン: CommandBinding が InnerView の CommandBindings コレクションに追加されるため、ContentControl 自体ではなく、ContentControl 内でホストされるビューであるため、CommandTarget は明らかに間違っています。

2) ContentControl。Content プロパティは、内側のビューで使用する必要がある ViewModel にバインドされます。

3) 内部ビューのタイプを定義する DataTemplate:

InnerView (UserControl から派生) は、その Loaded イベントで CommandBinding を設定します。

そしてもちろん、コマンドを定義するクラス:

どうすればこれを機能させることができますか? 問題はおそらく、ボタンの CommandTarget が間違っていることです。ContentControl がホストするコントロールに CommandTarget をバインドするにはどうすればよいですか?

InnerView を OuterView に直接配置し、Button の CommandTarget を InnerView インスタンスに設定すると、次のように動作します。

0 投票する
1 に答える
1012 参照

c# - WPF: ユーザー コントロール コマンドをメインウィンドウにルーティングする

wpfの仕組みを理解するのに問題があることを告白しなければなりません。MainwindowにネストされたユーザーコントロールBottomControlがあります。BottomControl の Button がクリックされた場合、Mainwindow で特定の変更 (たとえば、テキスト ボックスの内容の変更) が発生するようにします。

明らかに、Click_Event でパブリック プロシージャを呼び出すだけで簡単に実行できますが、これはあまり洗練されたものではありません。RoutedCommands を使用するまでになりました。

ユーザーコントロールのXAMLで

MainWindowのコードで

ist はこれらのイベントを認識しないため、明らかに Mainwindow はこれらのイベントを使用できません。私は何が欠けていますか?

どんな助けでも大歓迎です

ジョン

0 投票する
1 に答える
80 参照

c# - 複数の Windows の RoutedCommand

かなりの時間 Google の結果を調べてきましたが、RoutedCommand を使用して MouseClicks とキーボード ショートカットをキャッチして同じアクションを実行する方法の例しか見つかりませんでした。

MSDNhttps://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/などの RoutedCommand に関するいくつかのソースを読みましたが、それでも正しく理解している場合は、私ができることもできるはずです。必要:

  1. Window2 のボタンをクリックします。
  2. Window2 でメソッドを呼び出す
  3. Window1 でメソッドを呼び出す
  4. Window3 etc.pp.でメソッドを呼び出します。

ユースケースは、言語設定を保持する設定ウィンドウであり、設定で [OK] をクリックすると、すべてのアクティブなウィンドウが言語文字列を変更する必要があります。文字列を言語識別子でリロードするメソッドを作成しました。

したがって、一般に、Window2 の ButtonClick は、メソッド「ChangeLanguage(lng)」を呼び出すコマンドをすべてのアクティブな Windows に渡し、親の MainWindow であろうと、設定にまったく関係のない別の ChildWindow であろうとします。Window クラスには、独自の文字列を変更するための独自の ChangeLanguage() 関数があります。

この場合、カスタム EventHandler を使用する方が良いのではないかと思います。何らかの形でそれをグローバルにして、すべてのアクティブなウィンドウが設定ウィンドウで言語が変更されたときに発生するイベントをリッスンします。ここで別の質問でグローバル CommandHandler の例を見つけましたが、それはイベントでは機能していないと思います。

0 投票する
2 に答える
1082 参照

c# - グローバルに利用可能な WPF コマンド

Window含む要素がありますRibbonMenue。このWindow中にいくつかありUserControlsます。の 1 つはUserControlですDataGridICommandに行を追加および削除できるを作成しましたDataGrid

問題は、何らかの形で からこれらにアクセスする必要があることですがICommands、これらは宣言され、 にバインドされている にバインドさRibbonMenuれているため、「より高いレベル」(ウィンドウ) でアクセスできます。ViewModelUserControl

ICommandsグローバルに呼び出すことができるものを作成するにはどうすればよいですか? 行を削除する必要があるため、 の背後にあるICommandmy への参照が必要であることに注意してください。ViewModelUserControl

画像はそれを少し明確にします

0 投票する
1 に答える
112 参照

wpf - CustomControl でのコマンド バインディングの問題: CanExecute() が起動し、Execute() が起動しない

ControlTemplate のボタン コマンドを CustomControl の Execute() メソッドにバインドしています。RoutedCommand を使用しています。CanExecute() は起動しますが、Execute() は起動しません。CustomControl がメイン ウィンドウに配置されると、コードは期待どおりに機能します。ユーザーコントロールに配置すると、この問題が発生します。ボタン コマンド (RelayCommand など) を接続する方法をいくつか試しましたが、何が問題なのかわかりません。どんな助けでも大歓迎です。

文脈上、これは TokenizingTextBox コントロールであり、Xceed オープン ソース バージョンの初期のフォークです。このボタンは、トークンのリストからトークンを削除するためのものです。

TokenIten の完全なスタイル (対象のボタンを含む):

静的コマンド:

カスタム コントロールは ItemsControl から継承します。非静的コンストラクターでは、静的削除コマンドを DeleteToken メソッドに接続します。

最後に、CanExecute を true に設定するだけの CanDelete:

そして DeleteToken - 機能は省略されています。署名はここで本当に重要なものだけです:

したがって、これがガイダンス/提案を提供することに関心のある人にとって十分な情報であることを願っています. ありがとう。