【发布时间】:2012-03-29 04:01:25
【问题描述】:
我正在使用 silverlight 开发自己的文本编辑器。我制作了不同的函数来使richtextbox 中的文本变为粗体、斜体或下划线。我希望在用户按下组合 ctrl-B、ctrl-U、ctrl-I 时也运行这些功能。
什么是最好的解决方案?
【问题讨论】:
标签: c# silverlight richtextbox
我正在使用 silverlight 开发自己的文本编辑器。我制作了不同的函数来使richtextbox 中的文本变为粗体、斜体或下划线。我希望在用户按下组合 ctrl-B、ctrl-U、ctrl-I 时也运行这些功能。
什么是最好的解决方案?
【问题讨论】:
标签: c# silverlight richtextbox
您可以使用 RichTextBox 的 KeyDown 事件检测用户输入。然后您可以简单地检查该事件处理程序中键和修饰符的正确组合并在那里调用您的函数:
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 中,而不是随机的代码位中。
【讨论】: