C# 修改键组合输入
我正在silverlight中开发自己的文本编辑器。我使用了不同的函数来将richtextbox中的文本设置为粗体、斜体或下划线。我希望在用户按下组合ctrl-B、ctrl-U、ctrl-I时也能运行这些函数C# 修改键组合输入,c#,silverlight,richtextbox,C#,Silverlight,Richtextbox,我正在silverlight中开发自己的文本编辑器。我使用了不同的函数来将richtextbox中的文本设置为粗体、斜体或下划线。我希望在用户按下组合ctrl-B、ctrl-U、ctrl-I时也能运行这些函数 最好的解决方案是什么?您可以通过RichTextBox的按键事件检测用户输入。然后,您只需在该事件处理程序中检查key和modifier的正确组合,并在那里调用您的函数: private void MyRTB_KeyDown(object sender, KeyEventArgs e)
最好的解决方案是什么?您可以通过RichTextBox的按键事件检测用户输入。然后,您只需在该事件处理程序中检查key和modifier的正确组合,并在那里调用您的函数:
private void MyRTB_KeyDown(object sender, KeyEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Control)
{
if (e.Key == Key.B)
{
MakeBold();
}
else if (e.Key == Key.I)
{
MakeItalic();
}
else if (e.Key == Key.U)
{
Underline();
}
}
}
KeyDown事件处理程序将工作。稍微改进的版本是使用Blend SDK中的KeyDownTrigger。然后,您的XAML将如下所示:
<RichTextBox>
<i:Interaction.Triggers>
<i:KeyDownTrigger Modifiers="Control" Key="B">
<i:InvokeCommandAction Command="{Binding MakeBold}" />
</i:KeyDownTrigger>
</i:Interaction.Triggers>
</RichTextBox>
其中MakeBold在视图模型上显示为ICommand。这会显式地将所有键盘交互放在XAML中,而不是放在随机的代码位中。谢谢,这就像一个符咒。我会尽快接受的!