Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改键组合输入_C#_Silverlight_Richtextbox - Fatal编程技术网

C# 修改键组合输入

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)

我正在silverlight中开发自己的文本编辑器。我使用了不同的函数来将richtextbox中的文本设置为粗体、斜体或下划线。我希望在用户按下组合ctrl-B、ctrl-U、ctrl-I时也能运行这些函数


最好的解决方案是什么?

您可以通过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中,而不是放在随机的代码位中。

谢谢,这就像一个符咒。我会尽快接受的!