4

私はいくつかのデフォルトのキーバインディングを追加する必要があるカスタムコントロールを作成しています.Microsoftはすでにコピーしてテキストボックスに貼り付けています. ただし、キーバインドの 1 つは、バインド先のコマンドにパラメーターを渡す必要があります。xaml でこれを行うのは簡単ですが、コードでこれを行う方法はありますか?

this.InputBindings.Add(new KeyBinding(ChangeToRepositoryCommand, new KeyGesture(Key.F1)));
4

2 に答える 2

5

私は答えを見つけました:

InputBindings.Add(new KeyBinding(ChangeToRepositoryCommand, new KeyGesture(Key.F1)) { CommandParameter = 0 });

私の質問が不明確であった場合は、申し訳ありません。

于 2010-04-14T23:14:00.793 に答える
1

コピーアンドペーストコマンドはテキストボックスで処理されるため、パラメータは厳密には渡されませんが、何を取得しているのかはわかります。

私はハックを使用してこれを行います-そしてそのように添付されたプロパティ

   public class AttachableParameter : DependencyObject {

      public static Object GetParameter(DependencyObject obj) {
         return (Object)obj.GetValue(ParameterProperty);
      }

      public static void SetParameter(DependencyObject obj, Object value) {
         obj.SetValue(ParameterProperty, value);
      }

      // Using a DependencyProperty as the backing store for Parameter.  This enables animation, styling, binding, etc...
      public static readonly DependencyProperty ParameterProperty =
          DependencyProperty.RegisterAttached("Parameter", typeof(Object), typeof(AttachableParameter), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));
}

次にxamlで

<ListBox local:AttachableParameter.Parameter="{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}" />

これにより、パラメータが選択されたアイテムになります

次に、コマンドがウィンドウで起動したら、これを使用してコマンドパラメータが存在するかどうかを確認します(これをcanexecuteおよびExecutedから呼び出します)

  private Object GetCommandParameter() {
     Object parameter = null;
     UIElement element = FocusManager.GetFocusedElement(this) as UIElement;
     if (element != null) {
        parameter = AttachableParameter.GetParameter(element as DependencyObject);
     }
     return parameter;
  }

これはハックですが、キーバインディングから起動されるバインディングのコマンドパラメーターを取得する別の方法は見つかりませんでした。(もっと良い方法を知りたいです)

于 2010-04-14T04:08:27.720 に答える