atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • プログラミング図書館・本館
  • WPF
  • コマンド

コマンド

最終更新:2011年01月25日 02:00

atachi

- view
管理者のみ編集可
  • コマンドの呼び出し [#o999e49e]
    • コマンドの対象 [#zf5396dd]
  • コマンドの『中身』の実装 [#f2e1a4a6]
  • カスタムコマンドの作成 [#b4d9c788]
    • ICommandを使用したコマンドクラスの実装 [#l2907103]
  • コマンドソースの作成 [#xa070e5b]

コマンドを利用することで、コマンドが設定されたコンポーネントの意味とコマンドが実際に行うロジックとの関係が切り離される。

右クリックメニューの「切り取り」「コピー」「貼り付け」はコマンドの代表例である。それぞれの意味は誰しも知っているが、各コマンドがどのような処理を行うかは各アプリケーションが実装しなければならない。
WPFのコマンドもこのような意味であると捉えることができる。

  • MSDN コマンド実行の概要
  • WPF コマンド

コマンドとは実行されるアクションで、ICommandを継承しアクションを実装します。
コマンドの呼び出しは、コマンドソースから行います。

コマンドソースとはコマンドを呼び出す対象の要素です。ICommandSource を実装したクラスです。
WFPではButtonクラスやMenuItemクラスが実装済みです。

コマンドターゲットとはコマンドを実行する対象の要素です。

コマンドの呼び出し

ボタンが押された時にコマンドを呼び出したい場合は、Button.Commandに呼び出したいコマンドを指定します。

<Button Command="ApplicationCommands.Open">
  <Image Source="images/FileOpen.png"></Image>
</Button>
<Button Command="ApplicationCommands.Open" CommandParameter="パラメータ">
  <Image Source="images/FileOpen.png"></Image>
</Button>

CommandParameter属性はコマンドのハンドラに渡されるパラメータです。
ICommand.Execute の引数にそのまま渡されます。

コード上からコマンドを呼び出したい場合は、Execute()をコールします。

ApplicationCommands.Paste.Execute(null,textbox1);

コマンドの対象

発行されたコマンドを受け取り、コマンドを実行する要素を対象と呼びます。

次の例ではメニューバーから「貼り付け(ApplicationCommands.Paste)」というコマンドを発行した場合に、そのコマンドの実行対象としてmainTextBoxを指定しています。

<StackPanel>
  <Menu>
    <MenuItem Command="ApplicationCommands.Paste"
              CommandTarget="{Binding ElementName=mainTextBox}" />
  </Menu>
  <TextBox Name="mainTextBox"/>
</StackPanel>

コマンドの『中身』の実装

Windowsアプリケーションでよく使用される「保存」というコマンドは、その意味は誰でも知っているが、何をどのように保存するかはアプリケーションによって異なる。
テキストエディタならばファイルに文字列を保存する事を指しますし、ペインタなどのグラフィックソフトならばビットマップを任意の画像形式で保存します。

このようにコマンドがどのような処理を行うかは、アプリケーション側で実装する必要があります。

あるコマンドを受け取ったときの処理を結びつけることをコマンドバインディングと呼びます。
コマンドバインディングは分離コード、またはXAMLに記述することができます。

コマンドバインディングをコードで実装する場合は、CommandBindingを使用します。

public partical class MainWindow : Window {
	public MainWindow() {
		InitializeComponent();
 
		// コマンドバインディングの定義
		CommandBinding cb = new CommandBinding();
		cb.Command = ApplicationCommands.Open; // バインドしたいコマンドの種類
		cb.Executed += new ExecutedRoutedEventHandler(onOpenExecuter);
 
		this.CommandBinding.Add( cb );
	}
 
	private void onOpenExecuter(object sender, ExecutedRoutedEventArgs e) {
 
	}
}

また、このコードの等価実装をXAMLで記述することもできます。

<Window>
	<Window.CommandBindings>
		<CommandBinding Command="ApplicationCommands.Open" Execute="onOpenExecuter" />
	</Window.CommandBindings>
</Window>

カスタムコマンドの作成

オリジナルのコマンドを実装したい場合、RoutedCommand または RoutedUICommand の静的なインスタンスを定義します。

static RoutedUICommand StartUp = new RoutedUICommand(
	"アプリケーションのスタートアップ", "StartUpCommand", typeof(MainWindow));

ICommandを使用したコマンドクラスの実装

namespace my {
	// コマンドが実行された場合に、任意の処理(アクション)を呼び出す
	public class RelayCommand : ICommand {
		private readonly Action _execute;
		private readonly Func<bool> _canExecute;
 
		public RelayCommand(Action execute, Func<bool> canExecute) {
			_execute = execute;
			_canExecute = canExecute;
		}
 
		// ICommand Members
		public bool CanExecute(object parameter) {
			// コマンドが実行可能か??
			// _canExecuteが設定されている場合は、_canExecuteを使用するが、
			// 設定されていない場合は常に「true」とする。
			//
			return _canExecute == null ? true : _canExecute();
		}
 
		// ICommand Members
		public event EventHandler CanExecuteChanged {
			add {
				CommandManager.RequerySuggested += value;
			}
			remove {
				CommandManager.RequerySuggested -= value;
			}
		}
 
		// ICommand Members
		public void Execute(object parameter) {
			// コマンド実行時の処理
			_execute();
		}
	}
}

コマンドソースの作成

コマンドソースとはコマンドを発行できるオブジェクト要素です。
C#コードを使えばコマンドは自由に発行できるのですが、XAMLからコマンドを発行したい場合はオブジェクト要素がコマンドソースとなるように実装しなければなりません。

コマンドソースとなるには ICommandSource を継承したオブジェクト要素を作成します。

ButtonクラスはICommandSourceを継承しているので、ICommandSource.CommandによってButtonがクリックされたときに発行するコマンドを指定します。

コマンドソースを実装する場合、ICommandが発行するCanExecuteChangedイベントをハンドリングします。
CanExecuteChangedはICommandが実行可能である場合にtrueを取得できるイベントで、コマンドが発行可能であるかユーザーに知らせることができます。

「コマンド」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


プログラミング図書館・本館
記事メニュー

C#

  • 新機能
  • 言語文法
    • 型
    • 関数
    • クラス
    • 演算子
    • 構文
    • デリゲート
    • イベント
    • 例外処理
    • アトリビュート
    • 名前空間
    • ジェネリクス
  • リフレクション
  • LINQ

.NET Frameworks

  • 数値
  • 文字列
  • 日付時刻
  • オブジェクト
  • コレクション
  • ファイルシステム
  • スレッド
  • データテーブル
  • グラフィックス
  • デバッグ
    • ログ出力
    • ユニットテスト
  • ユーティリティ
  • ネットワーク
    • HTTP
  • デバイス
    • COMポート
  • EntityFrameworks
    • Code First Programming Model
  • デバイスドライバ
    • WinUSB

WPF

  • XAML
  • イベント
  • コマンド
  • スタイル
  • データバインディング
  • コンポーネント
  • グラフィックス
  • カスタムコンポーネント
    • 依存関係プロパティ

アプリケーション

  • 二重起動の防止
  • アンマネージドDLLの読み込み
  • 外部のアプリケーションを起動

VisualStudio

  • 拡張機能
  • カラー設定

ライブラリ

  • WPFToolkit
  • A Fast CSV Reader
  • AvalonDock

実装方法

  • ドラッグアンドドロップ
  • アプリケーション内のドラッグアンドドロップ
  • CSVからDataTable

minecraft

  • Bukkit
  • プラグイン
    • Permissions
    • SlowHealth
    • CookieMonster
    • iConomy
    • WorldGuard
    • Lockette
    • MyHome
    • BorderGuard

サイトについて

プロフィール/リンク/未分類

メモ/ゲーム/Stacks/Omoikane


更新履歴

取得中です。

ここを編集

記事メニュー2

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集

人気記事ランキング
  1. 構文
もっと見る
最近更新されたページ
  • 5033日前

    Bukkit
  • 5039日前

    トップページ
  • 5060日前

    メニュー
  • 5070日前

    WPF/グラフィックス
  • 5070日前

    .NET/グラフィックス
  • 5070日前

    .NET/グラフィックス/画像の書き込み
  • 5070日前

    .NET/グラフィックス/画像の読み込み
  • 5076日前

    .NET/コレクション
  • 5094日前

    .NET/WinUSB
  • 5129日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. 構文
もっと見る
最近更新されたページ
  • 5033日前

    Bukkit
  • 5039日前

    トップページ
  • 5060日前

    メニュー
  • 5070日前

    WPF/グラフィックス
  • 5070日前

    .NET/グラフィックス
  • 5070日前

    .NET/グラフィックス/画像の書き込み
  • 5070日前

    .NET/グラフィックス/画像の読み込み
  • 5076日前

    .NET/コレクション
  • 5094日前

    .NET/WinUSB
  • 5129日前

    BorderGuardプラグイン
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. AviUtl2のWiki
  7. Dark War Survival攻略
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. 星飼いの詩@ ウィキ
  10. ヒカマーWiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  4. ゲームカタログ@Wiki ~名作からクソゲーまで~
  5. 初音ミク Wiki
  6. 発車メロディーwiki
  7. 検索してはいけない言葉 @ ウィキ
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  10. モンスター烈伝オレカバトル2@wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  4. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. ドンキーコング バナンザ - アニヲタWiki(仮)
  6. チンポ画像収集場 - 検索してはいけない言葉 @ ウィキ
  7. 仕込みマシンガン/仕込み爆弾(遊戯王OCG) - アニヲタWiki(仮)
  8. ヤマダ電機の唄 - アニヲタWiki(仮)
  9. 危険度7 - 検索してはいけない言葉 @ ウィキ
  10. 千鳥の鬼レンチャン 挑戦者一覧 - 千鳥の鬼レンチャン サビだけカラオケデータベース
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.