8

Silverlight でキーストロークに基づいてコマンドを起動しようとしています。私が理解しているように、Silverlight では AccessKey または AcceleratorKey を使用できません。また、添付プロパティ InputBindings も機能しない可能性があるようです。

私は他の場所で探し始めました。Prism は Silverlight でコマンドを動作させる方法のようだったので、調べてみました。ただし、クリック ハンドラーしかないため、キー コマンドを設定するための出発点としても役に立ちません。

Prismの一部が欠けているだけですか?または、MVVM Silverlight でホットキーを処理する適切な標準的な方法はありますか?

4

3 に答える 3

9

KeyUp/KeyPress/KeyDown イベントを処理する「コードレス」MVVMish の方法を探しているようです。

オプション #1: プリズム。
あなたはそれがクリックコマンドでのみ出荷されると述べました。ただし、独自のアタッチされた DP を追加して、任意のイベント (KeyUp/KeyDown/KeyPress など) のコマンドを有効にすることができます。

その Corey のサンプルを探している場合は、ToggleButton.Checked/Unchecked イベントに適したサンプルがあります。
http://www.85turns.com/2009/06/24/togglebutton-command-for-prism/

<ToggleButton x:Name="ToggleButton1" 
            customCommands:Checked.Command="{Binding CheckedCommand}"
            customCommands:UnChecked.Command="{Binding UnCheckedCommand}"
        Margin="8,8,0,8" Content="Check me"
        />

また、Erik Mork は、コマンドの概要とカスタム コマンドの Attached DP の作成方法を説明する優れたビデオを公開しています。 http://development-guides.silverbaylabs.org/Video/Prism-Commands

オプション #2: ブレンド トリガー
Expression Blend SDK には、実行しようとしていることにぴったりのトリガーと動作が付属しています。
Blend Examples codeplex プロジェクトには、使用できる EventTrigger が付属しています。

<i:EventTrigger EventName="Click">
      <si:InvokeDataCommand Command="{Binding ShoppingCart.CheckOutCommand}"/>
</i:EventTrigger>

または、キー ストローク イベント用に独自のカスタム トリガーを作成し、そこで好きなことを行うこともできます。サンプルは次のとおりです:
http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx

于 2009-09-29T00:41:27.200 に答える
0

Ctrl+v のようなものですか? MSDN サイトで次の例を見たことがあります。

void Canvas_KeyUp(object sender, KeyEventArgs e)
{
    //check for the specific 'v' key, then check modifiers
    if (e.Key==Key.V) { 
        if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) {
        //specific Ctrl+V action here
        }
    } // else ignore the keystroke
}
于 2009-09-28T16:31:23.190 に答える
0

MVVM ツールキットには、CommandReferenceInputBinding を ViewModel コマンドにバインドできる興味深いクラスが含まれています。Silverlight で動作するかどうかはわかりませんが、試してみてください...

OK、RandomEngy が指摘したように、Silverlight には InputBindings はありません...

ただし、付属の動作を使用できると思います。これは、ViewModel のコマンドにイベントを「バインド」する方法です。Marlon Grechの優れた実装がここにあります

于 2009-09-28T16:35:02.360 に答える