编程语言
首页 > 编程语言> > c# – 覆盖RichEditBox上的键盘快捷键?

c# – 覆盖RichEditBox上的键盘快捷键?

作者:互联网

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

我正避免使用常规纯文本框,因为我想使用RichEditBox中的格式选项为文本添加语法高亮.如果用户可以操作框内的样式,那将无法工作.

谢谢!

解决方法:

最后我在another question中找到了答案:在触发KeyDown事件之前调用文本控件的OnKeyDown方法,因此您必须创建RichEditBox的子类并覆盖OnKeyDown方法,而不是监听KeyDown事件.然后在您的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);
        }
    }
};

标签:c,net,xaml,windows-runtime,winrt-xaml
来源: https://codeday.me/bug/20190702/1361369.html