有没有办法禁用或更好地覆盖 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);
}
}
};