2011-12-30 34 views
1

我在网上看,它似乎支持制表符作为字符,但当我按Tab键时,什么也没有发生。 RichTextBox是我应用程序中唯一的控件,所以我不想让Tab改变焦点,而是将制表符插入到编辑器中。如何在Silverlight RichTextControl中将选项卡启用为字符?

是否有我需要设置的属性来启用它?

+0

你是说当你按TAB键你想插入#9 – MethodMan 2011-12-30 08:48:13

+0

我不确定你的意思。但我期望通过Tab键获得标准的文本编辑器功能。 – 2011-12-30 08:51:41

+0

怎么样使用文本块 – MethodMan 2011-12-30 09:02:02

回答

2

从我看到它,那里有目前没有内置此功能,但你可以它自己:

private void RichTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     RichTextBox richTextBox = (RichTextBox) sender; 
     richTextBox.Selection.Select(richTextBox.ContentEnd, richTextBox.ContentEnd); 
     Run tab = new Run() {Text = "\t"}; 
     richTextBox.Selection.Insert(tab); 
    } 
} 

不幸的是,这一切混乱是必要的模拟了在WPF提供的AcceptsTab财产。上述techinque将所选内容设置为RichTextBox内容的末尾,然后在该位置插入新的Run(内嵌文本元素)。

我已经在浏览器中测试过它,它也适用于你。让我知道是否还有什么需要澄清的。

+1

谢谢你刚刚测试过,效果很好。显然你知道这个东西:O – 2011-12-30 12:05:55

1

我不知道此刻任何直接的方法,但你总是可以做

private void RichTextBox_KeyDown(object sender, KeyEventArgs e) 
     { 
      if(e.Key == Key.Tab) 
       rich.AppendText(" "); 
     } 
+0

谢谢,将追加插入文本或只是将其追加到文本框的末尾? – 2011-12-30 09:22:40

+0

根据MSDN,它给文本控件的内容添加一个字符串。 – 2011-12-30 09:27:43

+0

你还必须手动增加光标/插入符的位置我猜 – 2011-12-30 09:29:46

1

这是我的解决方案。也支持SHIFT + TAB。

private void txtText_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    if (e.Key == System.Windows.Input.Key.Tab) 
    { 
     e.Handled = true; 
     if ((System.Windows.Input.Keyboard.Modifiers & System.Windows.Input.ModifierKeys.Shift) != 0) 
     { 
      var startSel = txtText.Selection.Start; 
      var endSel = txtText.Selection.End; 

      var backwardPosition = txtText.Selection.Start.GetNextInsertionPosition(LogicalDirection.Backward); 
      if (backwardPosition != null) 
      { 
       txtText.Selection.Select(backwardPosition, txtText.Selection.Start); 
       var c = txtText.Selection.Text; 
       if (c.Equals("\t")) 
       { 
        txtText.Selection.Select(backwardPosition, endSel); 
        txtText.Selection.Text = ""; 
       } 
       else 
       { 
        txtText.Selection.Select(startSel, endSel); 
       } 
      } 
     } 
     else 
     { 
      txtText.Selection.Insert(new Run() { Text = "\t" }); 
     } 
    } 
} 
相关问题