私はメニューとサブメニューを含むアプリケーションを持っています。 Cut、Copy、Pasteなどのサブメニュー項目のいくつかにAppliocation Commandsを添付しました。
私はアプリケーションコマンドを持たない他のメニュー項目もあります。
これらのサブメニュー項目にカスタムコマンドバインディングを追加するにはどうすればよいですか?
私はthisの記事を見ましたが、私のサブメニューの項目にイベントを添付できません。WPFでカスタムルーティングコマンドを追加するにはどうすればよいですか?
答えて
:ウィンドウのマークアップで名前空間を追加し
public static class Command {
public static readonly RoutedUICommand DoSomething = new RoutedUICommand("Do something", "DoSomething", typeof(Window1));
public static readonly RoutedUICommand SomeOtherAction = new RoutedUICommand("Some other action", "SomeOtherAction", typeof(Window1));
public static readonly RoutedUICommand MoreDeeds = new RoutedUICommand("More deeds", "MoreDeeeds", typeof(Window1));
}
を今、私はちょうどアプリケーションコマンドの場合と同様にコマンドのバインディングを作成することができます
xmlns:w="clr-namespace:NameSpaceOfTheApplication"
::、名前空間を使用すると、ウィンドウ1クラスがであることを
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" Executed="CommandBinding_Open" />
<CommandBinding Command="ApplicationCommands.Paste" Executed="CommandBinding_Paste" />
<CommandBinding Command="w:Command.DoSomething" Executed="CommandBinding_DoSomething" />
<CommandBinding Command="w:Command.SomeOtherAction" Executed="CommandBinding_SomeOtherAction" />
<CommandBinding Command="w:Command.MoreDeeds" Executed="CommandBinding_MoreDeeds" />
</Window.CommandBindings>
そして、例えばメニューのバインディングを使用します。
<MenuItem Name="Menu_DoSomething" Header="Do Something" Command="w:Command.DoSomething" />
代わりに静的なクラスでそれらを定義するので、あなたにもXAMLで直接コマンドを宣言する可能性があります。例(Guffas良い例から適応):
<Window.Resources>
<RoutedUICommand x:Key="DoSomethingCommand" Text="Do Something" />
<RoutedUICommand x:Key="DoSomethingElseCommand" Text="Do Something Else" />
</Window.Resources>
<Window.CommandBindings>
<CommandBinding Command="{StaticResource DoSomethingCommand}" Executed="CommandBinding_DoSomething" />
<CommandBinding Command="{StaticResource DoSomethingElseCommand}" Executed="CommandBinding_DoSomethingElse" />
</Window.CommandBindings>
...
<MenuItem Name="Menu_DoSomething" Header="Do Something" Command="{StaticResource DoSomethingCommand}" />
これは実際のC#コードにバインドされていますか?もしそうなら、どうですか? RoutedUICommandsの目的は何ですか?彼らはどのような機能を追加しますか? –
@ EdJ.Plunkett:1.はい。 2. CommandBindingsを通して: 'CommandBinding_DoSomething'と' CommandBinding_DoSomethingElse'はC#のコードです。 3./4。 RoutedCommandsと通常のButton_Click-bindingsの利点についての一般的な説明は、たとえば、http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/(「Who Cares?」を参照してください。 )。 – Heinzi
ありがとうございます。私はRoutedUICommandsがGuffaの例に関連して何を追加しているのだろうかと思っていました。これは通常の昔のonclickの処理とは関係ありません(もしあなたが分かっていれば、これを尋ねることはありませんでした!ジョシュ・スミスの記事でそれを探してください。 –
私は私の答えは手遅れであることを知っているが、私はそれが将来のために役立つことを願っています。
私はGuffaとHeinziの回答に似ていますが、以前の結果を得るためには1つのコマンドしか使用できません。 私は通常Helpコマンド
<Window.CommandBindings>
<CommandBinding Command="{StaticResource Help}" Executed="HelpExecuted" />
</Window.CommandBindings>
を使用して、私は、各コールなどでCommandParametrを使用
<Window.InputBindings>
<KeyBinding Command="{StaticResource Help}" Key="A" Modifiers="Ctrl" CommandParameter="Case1"/>
<KeyBinding Command="{StaticResource Help}" Key="B" Modifiers="Ctrl" CommandParameter="Case2"/>
<KeyBinding Command="{StaticResource Help}" Key="C" Modifiers="Ctrl" CommandParameter="Case3"/>
<KeyBinding Command="{StaticResource Help}" Key="D" Modifiers="Ctrl" CommandParameter="Case4"/>
<MouseBinding Command="{StaticResource Help}" MouseAction="LeftDoubleClick" CommandParameter="Case5" />
</Window.InputBindings>
または
<Button Command="Help" CommandParameter="Case6" Content="Button">
<Button.InputBindings>
<KeyBinding Command="{StaticResource Help}" Gesture="Ctrl+D" CommandParameter="Case7"/>
</Button.InputBindings>
</Button>
とCSファイル内
private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
string str = e.Parameter as string;
switch (str)
{
case null://F1 Pressed default Help
//Code
break;
case "Case1":
//Code
break;
case "Case2":
//Code
break;
case "Case3":
//Code
break;
case "Case4":
break;
case "Case5":
//Code
break;
case "Case6":
//Code
break;
case "Case7":
//Code
break;
}
e.Handled = true;
}
とifあなたはMVVMパターン
private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
string str = e.Parameter as string;
Mvvm_Variable.Action(Input: str);
e.Handled = true;
}
を使用してViewModuleサイトへのスイッチを動かしています。 Actionは同じViewModuleクラスのメソッドです。
ちょうどチケット!コマンドのプロパティ値を使用すると、私のために多くの新しい可能性が開かれました:-) MinimizeWindow、MaximizeWindow、RestoreDownWindowのプロパティでApplicationCommands.NotACommandを使用しました – Heliac
私はこれを好きですが、それは制限があります - たとえば、メニューエントリに含まれるテキストはコマンドごとに定義されていますので、メニューが必要な場合(または後で追加する場合があります)、このメソッドは最良ではありませんコマンドテキストも)。 –
@Bob、これは簡単なswitch文ですが、フォームごとに制限があります。コマンドパラメータ文字列を反映するすべてのショートカットの組み合わせを使用します。この場合でもルーティングされたコマンドはあなたを助けません。 –
- 1. XAMLではなく、IronpythonコードからWPFタブアイテムを追加するにはどうすればよいですか?
- 2. WPF Windowsテンプレートに基づいてウィンドウにアイテムを追加するにはどうすればよいですか?
- 3. WPF ListViewでアイテム間にパディングを追加するにはどうすればよいですか?
- 4. WPFで行を動的に追加するにはどうすればよいですか?
- 5. WPFアプリケーションでCOMコントロールを追加するにはどうすればよいですか?
- 6. BloggerでJavaScriptを追加するにはどうすればよいですか?
- 7. FitNesseでポップアップを追加するにはどうすればよいですか?
- 8. C++でライブラリを追加するにはどうすればよいですか?
- 9. Linq2Sqlでカスタムヒントを追加するにはどうすればよいですか?
- 10. webapp2でauth_idを追加するにはどうすればよいですか?
- 11. Scalaでファイルに追加するにはどうすればよいですか?
- 12. Visual StudioにWPF Converterアイテムテンプレートを簡単に追加するにはどうすればよいですか?
- 13. ItemSourceを使用してWPFリストボックスにアイテムを追加するにはどうすればよいですか?
- 14. 右クリックコンテキストメニューをWPF 4 DataGridの列見出しに追加するにはどうすればよいですか?
- 15. 半透明の陰影をWPFの要素に追加するにはどうすればよいですか?
- 16. このWPFコントロールをWinFormに追加するにはどうすればよいですか?
- 17. WPFテキストボックスにヒントテキストを追加するにはどうすればよいですか?
- 18. テーブルに値を追加するにはどうすればよいですか?
- 19. アラートパネルにチェックボックスを追加するにはどうすればよいですか?
- 20. xpathにコメントを追加するにはどうすればよいですか?
- 21. アプリケーションをページに追加するにはどうすればよいですか?
- 22. リクエストにヘッダーフィールドを追加するにはどうすればよいですか?
- 23. テーブルをグラフに追加するにはどうすればよいですか?
- 24. CPViewにボーダーを追加するにはどうすればよいですか?
- 25. カスタムビューにトゥイーンアニメーションを追加するにはどうすればよいですか?
- 26. * argsにハッシュを追加するにはどうすればよいですか?
- 27. UIImagePickerControllerにスピナーを追加するにはどうすればよいですか?
- 28. フラスコにバックグラウンドスレッドを追加するにはどうすればよいですか?
- 29. PropertySheetにグリッパを追加するにはどうすればよいですか?
- 30. マスターページにJavaScriptを追加するにはどうすればよいですか?
このYouTubeのリンクを発見しました。 http://www.youtube.com/watch?v=mG4l0AaYBTM –