テキストボックスをクリアするためのボタンが埋め込まれたテキストボックスであるカスタムコントロールがあります。ボタンは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);
}
}