かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[C#][WPF]コマンドですね その5「RoutedCommand」

その1「ICommandインターフェース」:http://blogs.wankuma.com/kazuki/archive/2008/03/16/127903.aspx
その2「GUIにコマンドを結びつける」:http://blogs.wankuma.com/kazuki/archive/2008/03/16/127927.aspx
その3「ショートカットとコマンドを結びつける」:http://blogs.wankuma.com/kazuki/archive/2008/03/16/127931.aspx
その4「ショートカットとコマンドを結びつけるXAML版」:http://blogs.wankuma.com/kazuki/archive/2008/03/16/127934.aspx

今まで、その1で作ったHelloCommandを使いまわしてきたけど、今回でこいつともお別れ。
WPFには、RoutedCommandという便利なICommandの実装クラスが提供されているので、普通はそっちを使うことになってる。

WPF的には、コマンドは意味を表すのであってロジックは含まないものらしい。
ロジックはExecuteイベントとかに紐付けて行う。
この紐付けを行うためには、CommandBindingというものを使うらしい。後は、CommandBindingをWindowとかのCommandBindingsに登録することでバッチリ機能するようになるって寸法だ。

ということで、その4までのコードのHelloCommandをRoutedCommandに置き換えてみる。

using System.Windows;
using System.Windows.Input;

namespace WpfCommand
{
    public partial class Window1 : Window
    {
        public static readonly ICommand HelloCommand = new RoutedCommand("HelloCommand", typeof(Window1));

        public Window1()
        {
            InitializeComponent();
        }
    }
}

XAML側は前回と一緒

<Window x:Class="WpfCommand.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WpfCommand="clr-namespace:WpfCommand"
    Title="コマンド" Height="300" Width="300">
    <Window.InputBindings>
        <KeyBinding Command="{x:Static WpfCommand:Window1.HelloCommand}" Key="G" Modifiers="Control" />
        <MouseBinding Command="{x:Static WpfCommand:Window1.HelloCommand}">
            <MouseBinding.Gesture>
                <MouseGesture Modifiers="Control" MouseAction="LeftClick" />
            </MouseBinding.Gesture>
        </MouseBinding>
    </Window.InputBindings>
    <StackPanel>
        <Button Name="button" Content="Click!" Command="{x:Static WpfCommand:Window1.HelloCommand}" />
    </StackPanel>
</Window>

まだ何処にも「こんにちは世界」って表示するロジックを書いてないけど、とりあえず実行してみる。そうすると、ボタンがグレーになってクリック出来なくなってるのがわかる。当然クリックしても何も起きない。
image

この状態から、CommandBindingを使ってHelloCommandに「こんにちは世界」を表示するロジックを結び付けてみる。

using System.Windows;
using System.Windows.Input;

namespace WpfCommand
{
    public partial class Window1 : Window
    {
        public static readonly ICommand HelloCommand = new RoutedCommand("HelloCommand", typeof(Window1));

        public Window1()
        {
            InitializeComponent();

            // HelloCommandとHelloCommand_Executedの関連を表すCommandBindingを作る
            var helloCommandBinding = new CommandBinding(HelloCommand, HelloCommand_Executed);

            // それを登録する
            this.CommandBindings.Add(helloCommandBinding);
        }

        private void HelloCommand_Executed(object source, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show("こんにちは世界");
        }
    }
}

これを実行すると、ボタンが押せるようになって「こんにちは世界」も表示されるようになる。
image

因みに、このCommandBindingの作成と登録もXAML側に移動させることが出来る。
移動させると下のような感じになる。

<Window x:Class="WpfCommand.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WpfCommand="clr-namespace:WpfCommand"
    Title="コマンド" Height="300" Width="300">
    <!-- コマンドバインディングの登録 -->
    <Window.CommandBindings>
        <CommandBinding Command="{x:Static WpfCommand:Window1.HelloCommand}" Executed="HelloCommand_Executed" />
    </Window.CommandBindings>
    <Window.InputBindings>
        <KeyBinding Command="{x:Static WpfCommand:Window1.HelloCommand}" Key="G" Modifiers="Control" />
        <MouseBinding Command="{x:Static WpfCommand:Window1.HelloCommand}">
            <MouseBinding.Gesture>
                <MouseGesture Modifiers="Control" MouseAction="LeftClick" />
            </MouseBinding.Gesture>
        </MouseBinding>
    </Window.InputBindings>
    <StackPanel>
        <Button Name="button" Content="Click!" Command="{x:Static WpfCommand:Window1.HelloCommand}" />
    </StackPanel>
</Window>

投稿日時 : 2008年3月16日 11:27

Feedback

# wlAEQzhMCmWMRg 2011/09/29 12:08 http://oemfinder.com

F0w3Lu Comrade kill yourself.

# uLGiyHuggEdKY 2011/10/21 22:04 http://www.epotenzmittel.com/

Author, keep doing in the same way..!

# xPjitIJdEXib 2011/11/02 6:19 http://optclinic.com/

Totally agree with you, about a week ago wrote about the same in my blog..!

# kfzccGpMxtIsar 2011/11/02 9:39 http://papillomasfree.com/

The Author is crazy..!

# LYjnDcJJJBcN 2011/11/09 6:39 http://www.farmaciaunica.com/

I do`t regret that spent a few of minutes for reading. Write more often, surely'll come to read something new!...

# IpFKdwvsCbtJb 2011/11/15 4:00 http://www.pharmaciedelange.com/

Fresh thoughts, fresh view on the subject..!

# xiPjsVfjGt 2011/11/16 3:36 http://catalinabiosolutions.com/

It's pleasant sitting at work to distract from it?to relax and read the information written here:D

# welded ball valve 2012/10/19 1:09 http://www.jonloovalve.com/Full-welded-ball-valve-

you are really a excellent webmaster. The web site loading speed is amazing. It kind of feels that you are doing any unique trick. Furthermore, The contents are masterpiece. you've performed a magnificent task in this topic!

# Burberry Ties 2012/10/26 3:48 http://www.burberryoutletscarfsale.com/accessories

I was looking through some of your posts on this site and I think this web site is real informative! Keep putting up.
Burberry Ties http://www.burberryoutletscarfsale.com/accessories/burberry-ties.html

# cheap burberry bags 2012/10/26 3:48 http://www.burberryoutletscarfsale.com/burberry-ba

I dugg some of you post as I cerebrated they were handy handy
cheap burberry bags http://www.burberryoutletscarfsale.com/burberry-bags.html

# burberry watches on sale 2012/10/26 3:48 http://www.burberryoutletscarfsale.com/accessories

I was looking at some of your posts on this site and I conceive this website is very instructive! Continue posting .
burberry watches on sale http://www.burberryoutletscarfsale.com/accessories/burberry-watches.html

# t shirts 2012/10/26 3:48 http://www.burberryoutletscarfsale.com/burberry-wo

I really enjoy examining on this web site, it has got fantastic blog posts. "Never fight an inanimate object." by P. J. O'Rourke.
t shirts http://www.burberryoutletscarfsale.com/burberry-womens-shirts.html

# burberry wallets 2012/10/26 3:48 http://www.burberryoutletscarfsale.com/accessories

Some truly good information, Gladiola I observed this. "Our pleasures were simple-they included survival." by Dwight D Eisenhower.
burberry wallets http://www.burberryoutletscarfsale.com/accessories/burberry-wallets-2012.html

# hwPApBuYJCBoG 2014/08/02 2:57 http://crorkz.com/

Kkxll8 Im thankful for the blog article.Really looking forward to read more. Really Great.

タイトル  
名前  
Url
コメント