有没有办法禁用或更好地覆盖 WinRT RichEditBox 控件上的键盘快捷键?当您按 Ctrl-B 和 Ctrl-I 时,我希望能够禁用粗体和斜体格式。

我避免使用常规的纯文本框,因为我想使用 RichEditBox 中的格式选项向文本添加语法突出显示。如果用户可以操纵框中的样式,那将不起作用。

谢谢!

最佳答案

终于,我在 another question 中找到了答案:文本控件的 OnKeyDown 方法在 KeyDown 事件被触发之前被调用,因此与其监听 KeyDown 事件,不如创建 RichEditBox 的子类并覆盖 OnKeyDown 方法。然后在您的 XAML 标记或您实例化 RichEditBox 的任何地方,改用您的自定义子类。作为一个有点相关的示例,我创建了 TextBox 的覆盖,以防止撤消和重做操作:

[Windows::Foundation::Metadata::WebHostHidden]
public ref class BetterTextBox sealed : public Windows::UI::Xaml::Controls::TextBox
{
public:
    BetterTextBox() {}
    virtual ~BetterTextBox() {}
    virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override
    {
        Windows::System::VirtualKey key = e->Key;
        Windows::UI::Core::CoreVirtualKeyStates ctrlState = Windows::UI::Core::CoreWindow::GetForCurrentThread()->GetKeyState(Windows::System::VirtualKey::Control);
        if ((key == Windows::System::VirtualKey::Z || key == Windows::System::VirtualKey::Y) &&
            ctrlState != Windows::UI::Core::CoreVirtualKeyStates::None)
        {
            e->Handled = true;
        }

        // only call the base implementation if we haven't already handled the input
        if (!e->Handled)
        {
            Windows::UI::Xaml::Controls::TextBox::OnKeyDown(e);
        }
    }
};

10-07 19:00