泥庭

2010年10月26日

ShortCutKeyとCommandBinding

Filed under: WPF — タグ: , , , — yone64 @ 2:35 AM

WindowsFormで、ショートカットキーを割り当てるのは比較的簡単にできます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/208winshrtcutkey/winshrtcutkey.html

同じ感覚で、WPFでも、と思ったら結構はまりました。
最初に書いたXAML は、以下の通り。完全にWinFormののりです。

<Window x:Class="ShortCutKey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Menu Height="23" Name="menu1" Width="200" Margin="0,0,302,288">
            <MenuItem Header="ファイル(_F)">
                <MenuItem Header="開く(_O)" InputGestureText="Ctrl+O" Command="{Binding Path=Command1}"/>
                <MenuItem Header="保存(_S)" InputGestureText="Ctrl+S" Command="{Binding Path=Command2}"/>
            </MenuItem>
            <MenuItem Header="編集(_E)" />
        </Menu>
    </Grid>
</Window>

で、やっぱり動きませんでした。

MSDNの解説によると、「メニュー項目にテキストを追加するだけです」とのこと。

http://msdn.microsoft.com/ja-jp/library/system.windows.controls.menuitem.inputgesturetext.aspx

調べていくと、KeyBindingを使えとのことなので、こんな感じになりました。

<Window x:Class="ShortCutKey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.InputBindings>
        <KeyBinding Command="{Binding Path=Command1}" Gesture="Ctrl+O"/>
        <KeyBinding Command="{Binding Path=Command2}" Gesture="Ctrl+S"/>
    </Window.InputBindings>
    <Grid>
        <Menu Height="23" Name="menu1" Width="200" Margin="0,0,302,288">
            <MenuItem Header="ファイル(_F)">
                <MenuItem Header="開く(_O)" InputGestureText="Ctrl+O" Command="{Binding Path=Command1}"/>
                <MenuItem Header="保存(_S)" InputGestureText="Ctrl+S" Command="{Binding Path=Command2}"/>
            </MenuItem>
            <MenuItem Header="編集(_E)" />
        </Menu>
    </Grid>
</Window>

このXAML、一点注意があって.NET4だと期待通り動くのですが、3.5だとエラーが出ます。3.5ではKeyBInding.CommandがDependencyPropertyではないらしい。この場合、一度リソース登録等する必要があるようです。

検索中に、CommandReference(※)なるものを使っているサンプルを発見しました。

※MVVM Toolkitに含まれています。

http://wpf.codeplex.com/releases/view/14962

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com で無料サイトやブログを作成.

%d人のブロガーが「いいね」をつけました。