6

以前、私が使用していた

this.CommandBindings.Add(
    new CommandBinding(ApplicationCommands.Copy, this.cmdCopy_Executed, this.cmdCopy_CanExecute))

cmdCopy_Executed は非静的関数ですが、使用している人々を見てきました

static MyControl()
    {
        CommandBinding binding =
            new CommandBinding(ApplicationCommands.Save, CommandHandler);
        CommandManager.RegisterClassCommandBinding(typeof(MyControl), binding);
    }
 private static void CommandHandler(object target, ExecutedRoutedEventArgs e)
    {
        MessageBox.Show("Command Handled!");
    }

CommandBinding は静的です。どちらが優先されますか?

4

1 に答える 1

6

後者はよりグローバルなハンドラーであり、前者はインスタンスごとです。

また、RegisterClassCommandBinding の登録を解除することはできないため、一度登録すると手詰まりになります。通常、これを使用する場合は、コントロールで仮想メソッドを呼び出して、その動作を変更またはバイパスできるようにすることをお勧めします。

CommandBindings を使用すると、不要になったバインディングを削除できます。これは、管理下にある外部ユーザーが行うこともできます。したがって、必要なコマンドバインディングを追加することはできますが、誰かが簡単に行うことができますelement.CommandBindings.Clear().

このように違いがあり、それぞれに場所があります。簡単にカスタマイズできるようにしたい場合は、前者を使用します。

于 2011-06-17T16:30:57.093 に答える