FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Blend SDKのKeyTriggerでショートカットキーを設定する

 WPFの標準機能でショートカットキーを設定する場合はInputBindingsでキーストロークとコマンドを結びつけます。
 でもこの方法だとコマンドが必須になります。
 Blend SDKやLivetを使用している場合はメソッドバインディングが可能なので、できればコマンドは作りたくありません。
 そんな場合はBlend SDKのKeyTriggerを使用しましょう。
 KeyTriggerの場合はメソッドでもバインディングが可能です。
 以下のサンプルはショートカットキーで値のインクリメント、デクリメントを行うコードです。
using Livet;

namespace Blend4.ViewModels
{
    public class MainWindowViewModel : ViewModel
    {
        public MainWindowViewModel()
        {
            Value = 0;
            CanIncrement = true;
            CanDecrement = false;
        }


        #region Value変更通知プロパティ
        private int _Value;

        public int Value
        {
            get
            { return _Value; }
            set
            { 
                if (_Value == value)
                    return;
                _Value = value;
                RaisePropertyChanged();
            }
        }
        #endregion

        public bool CanIncrement { get; private set; }

        public bool CanDecrement { get; private set; }

        public void Increment()
        {
            Value++;
        }

        public void Decrement()
        {
            Value--;
        }
    }
}
 ViewModelではValueプロパティとValueプロパティを増減させるIncrementメソッドとDecrementメソッドを作成しています。
 また、これらのメソッドが実行可能かどうかを示すプロパティも用意しました。
 メソッドが常に使用可能な場合は必要ありませんが、今回は例としてIncrementは実行可能、Decrementは実行不可能にしたときの挙動を見てみます。
 次にViewですが、インクリメントとデクリメントにショートカットキーを割り振ってあります。
<Window x:Class="Blend4.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
        xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
        xmlns:v="clr-namespace:Blend4.Views"
        xmlns:vm="clr-namespace:Blend4.ViewModels"
        Title="MainWindow" Height="70" Width="80">

    <Window.DataContext>
        <vm:MainWindowViewModel/>
    </Window.DataContext>
    
    <i:Interaction.Triggers>
        <ei:KeyTrigger Modifiers="Control" Key="Up">
            <!--Livetを使用する場合-->
            <l:LivetCallMethodAction MethodTarget="{Binding}" 
                                     MethodName="Increment"
                                     IsEnabled="{Binding CanIncrement}"/>
        </ei:KeyTrigger>
        
        <ei:KeyTrigger Key="Down">
            <!--Blend SDKを使用する場合-->
            <ei:CallMethodAction TargetObject="{Binding}"
                                 MethodName="Decrement"
                                 IsEnabled="{Binding CanDecrement}"/>
        </ei:KeyTrigger>
    </i:Interaction.Triggers>
    
    <StackPanel>
        <TextBlock Text="{Binding Value, StringFormat=値:{0}}"/>
    </StackPanel>
</Window>
 KeyTriggerではModifiersプロパティとKeyプロパティでショートカットキーを設定します。
 ショートカットキーが押された際に指定アクションが実行されます。
 このコードではメソッドの実行を行っています。
 Livetを使用している場合はLivetCallMethodActionを使用します。Livetを使用していない場合はBlend SDKのCallMethodActionを使用すれば同じことが可能です。
 この2つのアクションはプロパティ名は少し違いますがどちらも対象となるオブジェクト(ViewMode)とメソッド名を指定します。
 指定できるメソッドは引数なしで戻り値がvoidのメソッドに限られます。
 IsEnabledを指定することで実行可能かどうかの制御も行えます。
 IsEnabledを省略した場合は常に実行可能とみなされます。
 このコードを実行し、Ctrl + Upキーを押すと値がインクリメントされますが、CanDecrementはfalseなのでデクリメントのショートカットキー(Down)は押しても何も起こりません。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
11  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。