Wpf 如何注册/收听richtextbox命令';s

Wpf 如何注册/收听richtextbox命令';s,wpf,richtextbox,command,Wpf,Richtextbox,Command,我正在使用WPF RichTextBox在应用程序中创建一个简单的编辑器。在上面,我添加了规则按钮,如粗体、斜体等。这些按钮使用RichTextBox的命令来设置这些属性,但在这些按钮旁边,命令还使用CTRL+B、CTRL+I等进行发送。我希望这些按钮代表RichTextBox在光标处的当前状态。我已经了解了如何获取此状态,当我在SelectionChanged事件中更新此状态时,它会起作用。当然,当切换粗体时不会触发此事件,所以并没有直接反馈 我想知道是否有一种方法可以在不影响命令的原始行为或

我正在使用WPF RichTextBox在应用程序中创建一个简单的编辑器。在上面,我添加了规则按钮,如粗体、斜体等。这些按钮使用RichTextBox的命令来设置这些属性,但在这些按钮旁边,命令还使用CTRL+B、CTRL+I等进行发送。我希望这些按钮代表RichTextBox在光标处的当前状态。我已经了解了如何获取此状态,当我在SelectionChanged事件中更新此状态时,它会起作用。当然,当切换粗体时不会触发此事件,所以并没有直接反馈

我想知道是否有一种方法可以在不影响命令的原始行为或其他想法的情况下,倾听命令的调用

我试着用以下方式听命令:

   CommandBinding boldBinding = new CommandBinding(EditingCommands.ToggleBold, CommandExecuted);
  _richTextBox.CommandBindings.Add(boldBinding);   

这确实更新了属性,但RichTextBox似乎不再接收该命令

我还尝试在包含RichTextBox的控件上生成自己的命令,但是当RichTextBox具有焦点时按下CTRL+B时,会调用原始的RichTextBox命令,而不是新的RichTextBox命令

非常感谢


Liewe

为了监听被调用的命令,您可以使用CommandManager引发的事件:Executed或PreviewExecuted

如果将XAML更改为:

<RichTextBox x:Name="_richTextBox" ... 
    CommandManager:PreviewExecuted="OnRichTextBoxCommand" ... />
它可能更复杂一些,因为调用此方法时当前选择可能没有更改,因此您必须向自己发布消息,例如:

            Dispatcher.BeginInvoke(new Action(UpdateProperties));
(如果您已经引用System.Core,则您具有操作类型,否则定义一个不带参数并返回void的委托,并在中使用。)

    private void OnRichTextBoxCommand(object sender, ExecutedRoutedEventArgs e) {

        if (e.Command == EditingCommands.ToggleBold) {
            UpdateProperties();
        }
    }
            Dispatcher.BeginInvoke(new Action(UpdateProperties));