カスタムコンポーネントのラインナップのコマンドパターン例

StackOverflow https://stackoverflow.com/questions/8452

  •  08-06-2019
  •  | 
  •  

質問

もちろん、一部のコンポーネントのラインナッププログラミングといったコマンドのパターンです。毎例のようにするために建てのもの、編集、カット、ペーストです。誰でも例を挙げてみまたはご提案のベストプラクティスのカスタムコマンド?

役に立ちましたか?

解決

ああ!質問できます!まず、こうして個人的には見つかりやすくなりに定義し、フックコマンドをコードではなくー.できるフックのハンドラのコマンドはもう少し柔軟により、すべてのポアプローチする。

を行わなければならないコマンドをいう。アダプタのご使用をおいてクラスを定義するための重要な応用のコマンドはこのように:

public static class CommandBank
{
  /// Command definition for Closing a window
  public static RoutedUICommand CloseWindow { get; private set; }

  /// Static private constructor, sets up all application wide commands.
  static CommandBank()
  {
    CloseWindow = new RoutedUICommand();
    CloseWindow.InputGestures.Add(new KeyGesture(Key.F4, ModifierKeys.Alt));
    // ...
  }

現在、私たちのコードと、コードのみへのコマンドでき、以下の方法により、クラス以上

/// Closes the window provided as a parameter
public static void CloseWindowExecute(object sender, ExecutedRoutedEventArgs e)
{
  ((Window)e.Parameter).Close();
}

/// Allows a Command to execute if the CommandParameter is not a null value
public static void CanExecuteIfParameterIsNotNull(object sender, CanExecuteRoutedEventArgs e)
{
  e.CanExecute = e.Parameter != null;
  e.Handled = true;
}

第二の方法であっても共有するその他のコマンドをずっと繰り返します。

また、事前の通知なくコマンドはこのように追加することができますして、この作品のポートします。以下では、一度ウィンドウでのアカウンロードを追加するコマンドのバインディングの画面や項目を追加して入力結合にウィンドウでループをなすべてのコマンドをランタイム環境を含んでいます。パラメータを渡しても、窓を自己で上記のコードの認知が広がっていウィンドウにしてみます。

public partial class SimpleWindow : Window
{
  private void WindowLoaded(object sender, RoutedEventArgs e)
  {
    // ...
    this.CommandBindings.Add(
      new CommandBinding(
        CommandBank.CloseWindow,
        CommandBank.CloseWindowExecute,
        CommandBank.CanExecuteIfParameterIsNotNull));

    foreach (CommandBinding binding in this.CommandBindings)
    {
       RoutedCommand command = (RoutedCommand)binding.Command;
       if (command.InputGestures.Count > 0)
       {
         foreach (InputGesture gesture in command.InputGestures)
         {
           var iBind = new InputBinding(command, gesture);
           iBind.CommandParameter = this;
           this.InputBindings.Add(iBind);
         }
       }
    }

    // menuItemExit is defined in XAML
    menuItemExit.Command = CommandBank.CloseWindow;
    menuItemExit.CommandParameter = this;
    // ...
  }

  // ....
}

そしても降っていイベントハンドラのWindowClosing、WindowClosedイベント、お勧めの実際の実装のコマンドとして小型のサイトにリンクしています。この場合、かみつつあるコードを止め、窓は閉館があれば未保存のデータかで、そのコードでしっかりと内部のWindowClosingイベントです。

う場合をフォロー。:)

他のヒント

の2008年版にお客様の権利について、ブライアンNoyesた優れた条約のRoutedCommand/RoutedEvents!!!

リンクはこちらです:http://msdn.microsoft.com/en-us/magazine/cc785480.aspx

報の発想でオリンピック"シンプル'プログラム、残念ながらうまくいかないときしたいと思うならもう一部屋が空室となっています。いくつかの方法がありますの授業およびUIのすべてのあったコマンドがなかった無効にするための書き'CanAlwaysExecute法は各ウィンドウでUserControl!ことになるだけでな ドライ.

を読む複数のブログを通じていつものためのシェイプを作ってみましたの選択がポ純粋ないので、スタイル、アニメーションをトリガーとする。すべてのマキのイベントハンドラは、指令は下のコードです。:)

他gotchaように入力結合、ビザを取得するためには、半年に引っかかけのオブジェクトを格納する入力サービスを提供します。例えば、ショートカットできるので、ご利用時間に(例えば、F1の開設を受けることができるように、入力結合の設定のウィンドウオブジェクトで、常にフォーカス時のアプリで活躍しました。に、コードエディタツールバー上のメソッドはそれでもとっつきやすく、もっと利用開始時のUserControlsるものを追加したい入力バインディングを親ウインドウです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top