3

ApplicationCommands クラスを使用すると、無料で多くのものを取得できます。テキスト、ショートカット、ローカリゼーション。ただし、_ 表記 (E_xit など) で指定する文字を指定する方法があるようです (または、私は見つけていません)。たとえば、その文字を指定する方法はありますか

ApplicationCommands.New ? 

または、これを使用してこれに対する唯一の解決策です

CustomRountedUICommand 

name プロパティに _New を指定するだけでよいのはどこですか?

編集:

ここで私のxamlファイルの抽出を明確にするために:

<MenuItem Name="NewProject" Command="{Binding MenuNewProject}" />

MenuNewProject は、InputGesture が追加された ApplicationCommand.New です。しかし、メニュー ヘッダーを設定せずにアンダースコアを追加するにはどうすればよいでしょうか (これはコマンド バインディングによって既に行われています)。

編集2:

指摘されているように、これは明らかにメニューの問題です。問題は、アクセラレータ キーを指定するテキスト内の _ に代わるものはありますか? MenuItem クラスには何も見つかりませんでした。

最終的解決:

次のいずれかを使用します。

AccessKeyManager.Register('N',MenuItem)

しかし、示されている下線付きの N またはセットを緩めます

MenuItem.Header ='_New'

手動でローカリゼーションを失います。残念ながら、ApplicationCommands.New.Name を解析すると、常に英語の名前が返されます。ContentPresenter クラスを使用した解決策があるかもしれませんが、それは私の小さなプロジェクトでは少しやり過ぎです。

4

2 に答える 2

1

ヘッダー テキストでアンダースコアを使用し_てホットキーを作成するか、InputBinding を使用してショートカットを作成します (この回答から)。

<Window.CommandBindings>
        <CommandBinding Command="New" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Window.InputBindings>
        <KeyBinding Key="N" Modifiers="Control" Command="New"/>
</Window.InputBindings>
于 2013-05-10T12:28:13.180 に答える
1

RoutedUICommandはアクセラレータ キーまたはショートカット キーを指定しません。これらは複数の場所に配置される可能性があり、パラメータが異なる可能性があるためです (実際には異なるコマンドになります)。したがって、アクセラレータを適用する責任はMenu、コマンドをホストする側にあります。これらは自分で割り当てる必要があります。

<MenuItem Header="_New"
          Command="ApplicationCommands.New" />

InputBindingXAML またはコード ビハインドでを使用して指定するショートカット キー。

<Window.InputBindings>
  <KeyBinding Key="N"
              Modifiers="Control" 
              Command="ApplicationCommands.New" />
</Window.InputBindings>

ショートカット キーがメニューに自動的に表示されます。

于 2013-05-10T12:28:14.530 に答える