0

テキストボックスをクリアするためのボタンが埋め込まれたテキストボックスであるカスタムコントロールがあります。ボタンはApplicationCommands.Delete、ターゲットをテキストボックスとしてコマンドに接続されています。これは期待どおりに機能します。

私の問題は、このカスタム テキスト ボックスを使用する別のコントロールがApplicationCommands.Deleteあり、既定のアクションの上に独自のアクションを実行できるように、いつ実行されるかを知る必要があることです。に追加しようとしましたCommandBindingsが、うまくいきません。親レベルでコマンドの通知を受け取る方法はありますUIElementか?

TextBox カスタム コントロール XAML

<UserControl.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Delete" Executed="ClearTextBoxExecuted" />
</UserControl.CommandBindings>
...
<Button Command="ApplicationCommands.Delete" CommandTarget="{Binding ElementName=FilteredTextBox}"

コードビハインド:

private void ClearTextBoxExecuted(object sender, ExecutedRoutedEventArgs e)
{
  if (!(e.OriginalSource is TextBox)) return;
  var textBox = e.OriginalSource as TextBox;
  textBox.Clear();
  if (TextCleared != null)
    TextCleared(sender, null);
}

アセンブリのリソース Uri 制約により Xaml がテキスト ボックスをラップする

<UserControl x:Class="CopyOfEnhancedTextboxForLocalInheritance" Name="MainWrapper">
<textBoxes:EnhancedTextBox x:Name="EnhancedTextBox"...

HotKeySelectorTextBox:

public class HotKeySelectorBox : CustomTextBox
{
  void SetupCommands()
  {
    var deleteCommand = new CommandBinding(ApplicationCommands.Delete,
                                         (sender, args) => 
                                           DeleteSelection());
    deleteCommand.CanExecute +=
    (sender, args) =>
      {
        args.Handled = true;
        args.CanExecute = !(Text == String.Empty || Text == "none");
      };
    EnhancedTextBox.CommandBindings.Add(deleteCommand);
    CommandBindings.Add(deleteCommand);
  }
}
4

0 に答える 0