如何在Silverlight RichText控件中启用标签作为字符?

时间:2011-12-30 08:35:36

标签: c# .net silverlight richtextbox

我在网上查看它似乎支持标签作为字符但是当我按下Tab键时,没有任何反应。 RichTextBox是我的应用程序中唯一的控件,因此我不希望让Tab更改焦点,而是将制表符插入编辑器。

我需要设置一个属性来启用它吗?

3 个答案:

答案 0 :(得分:2)

从我的观点来看,theres目前没有内置功能,但你可以自己做:

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 :(得分:1)

目前我不知道任何直接的方式,但你总能做到

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

答案 2 :(得分: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" });
        }
    }
}