none
キーボードでの操作について教えてください。 RRS feed

  • 質問

  • いつもお世話になります。
    VisualC#2010、WindowsXPでの動作について質問があります。
    キーボードでの操作について教えてください。
    上下矢印キーの処理をしたいと思いました。
    xamlに
    <Window.InputBindings>
    <KeyBinding Key="Delete" Command="Delete"/>
    <KeyBinding Key="Down" Command="Down"/>
    </Window.InputBindings>
    <Window.CommandBindings>
     <CommandBinding Command="Delete" Executed="Delete_Executed" />
     <CommandBinding Command="Down" Executed="Down_Executed" />
    </Window.CommandBindings>
    のようにして、.csで
    private void Delete_Executed(object sender, ExecutedRoutedEventArgs e) {
     // 処理
    }

    private void Down_Executed(object sender, ExecutedRoutedEventArgs e) {
     // 処理
    }
    と処理しようとしました。
    これで、Deleteキーのほうは問題なく処理できるのですが、Downのほうは、「Downは変換できません」というエラーです。
    どのようにしたらよいのでしょう?

    2011年1月7日 7:20

回答

すべての返信

  • <KeyBinding Key="Down" Command="Down"/>
    <CommandBinding Command="Down" Executed="Down_Executed" />

    XAML 上で Command プロパティにコマンド名だけ渡せるのは、ApplicationCommands 、NavigationCommands、MediaCommands、EditingCommands、および ComponentCommands クラスに含まれるプロパティのみです。

    というかそもそも Down なるコマンドはどこかに定義しているのでしょうか?

    2011年1月7日 7:52
  • ということは、Command="MoveDownByLine "と書けばいいのかな。
    • 回答としてマーク d-kot 2011年1月7日 9:19
    2011年1月7日 9:07
  • なるほど。
    Downなるコマンドはぜんぜん定義しておらず、キーボードのDownキーをさしているつもりでした。

    <Window.InputBindings>
    <KeyBinding Key="Delete" Command="Delete"/>
    <KeyBinding Key="MoveDownByLine" Command="Down"/>
    </Window.InputBindings>
    <Window.CommandBindings>
     <CommandBinding Command="Delete" Executed="Delete_Executed" />
     <CommandBinding Command="MoveDownByLine" Executed="Down_Executed" />
    </Window.CommandBindings>

    として解決できました。
    ありがとうございました。

    2011年1月7日 9:18
  • d-kot さんの↑のXAML、実際のコードからの写し間違いかと思いますが、ちょっと違ってますね。
    Hongliang さんにも回答マークをつけてあげたほうがいいと思いました。

    クラスを指定しない場合、Delete は ApplicationCommands になるみたいですね。
    EditingCommands に統一する場合は以下のように書けるようです。

    <Window.InputBindings>
        <KeyBinding Key="Delete" Command="EditingCommands.Delete"/>
        <KeyBinding Key="Down" Command="EditingCommands.MoveDownByLine"/>
    </Window.InputBindings>
    <Window.CommandBindings>
        <CommandBinding Command="EditingCommands.Delete" Executed="Delete_Executed" />
        <CommandBinding Command="EditingCommands.MoveDownByLine" Executed="Down_Executed" />
    </Window.CommandBindings>

    ComponentCommands には MoveDown があったりして、本当はどのクラスを使うのが適切なのかな?と思いました。
    クラスが違っても、イベントハンドラの e でそれに依存しなければ、なんでもよいのかな?とも思いました。
    それと、それぞれのコマンドの既定のキージェスチャと同じなので、KeyBinding は不要かなと思ったのですが、そうでもないようですね。

    2011年1月7日 9:49