有没有办法禁用或覆盖WinRT RichEditBox控件上的键盘快捷键?我想要禁用当你按下Ctrl-B和Ctrl-I时的加粗和斜体格式。
我避免使用普通的TextBox,因为我想要使用RichEditBox中的格式选项来给文本添加语法高亮。如果用户可以在框内操作样式,那么这种方法就不行了。
谢谢!
我避免使用普通的TextBox,因为我想要使用RichEditBox中的格式选项来给文本添加语法高亮。如果用户可以在框内操作样式,那么这种方法就不行了。
谢谢!
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);
}
}
};
RichExitBox
的KeyDown
事件,并且丢弃相应的控制键。 - dbcKeyRoutedEventArgs
的Handled
属性在KeyDown
和KeyUp
事件中都设置为 true。这样可以防止我在框中输入任何内容...但我仍然能够将已经存在的文本加粗和斜体化。 - CourtneyHandled
设置为true
应该完成的工作,对于除加粗和斜体文本之外的所有内容都有效。 - Courtney