Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 如何在Silverlight RichTextControl中启用选项卡作为字符?_C#_.net_Silverlight_Richtextbox - Fatal编程技术网

C# 如何在Silverlight RichTextControl中启用选项卡作为字符?

C# 如何在Silverlight RichTextControl中启用选项卡作为字符?,c#,.net,silverlight,richtextbox,C#,.net,Silverlight,Richtextbox,我在网上看了看,它似乎支持标签作为字符,但当我按下Tab键时,什么也没发生RichTextBox是我的应用程序中唯一的控件,因此我不想让选项卡更改焦点,而是将选项卡字符插入编辑器 是否需要设置一个属性来启用此功能?目前我不知道任何直接方法,但您总是可以这样做的 private void RichTextBox_KeyDown(object sender, KeyEventArgs e) { if(e.Key == Key.Tab)

我在网上看了看,它似乎支持标签作为字符,但当我按下
Tab
键时,什么也没发生
RichTextBox
是我的应用程序中唯一的控件,因此我不想让
选项卡更改焦点,而是将选项卡字符插入编辑器


是否需要设置一个属性来启用此功能?

目前我不知道任何直接方法,但您总是可以这样做的

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

我现在不知道有什么直接的方法,但你总是可以的

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

从我的角度来看,目前没有内置的功能,但您可以自己完成:

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
属性,所有这些混乱都是必需的。上述技术将选择设置到
RichTextBox
内容的末尾,然后在该位置插入新的
Run
(内联文本元素)


我已经在浏览器中测试过了,它应该也适用于您。如果还有什么需要澄清的,请告诉我。

从我的角度来看,目前没有内置的功能,但您可以自己做:

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
属性,所有这些混乱都是必需的。上述技术将选择设置到
RichTextBox
内容的末尾,然后在该位置插入新的
Run
(内联文本元素)


我已经在浏览器中测试过了,它应该也适用于您。如果还有什么需要澄清的,请告诉我。

这是我的解决方案。还支持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" });
        }
    }
}

这是我的解决办法。还支持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" });
        }
    }
}

你是说当你按TAB键时,你想插入#9我不知道你的意思。但我希望通过tab键获得标准的文本编辑器功能。@DJKRAZE a
TextBlock
?对于可编辑的富文本?你是说当你点击TAB键时你想插入#9我不确定你的意思。但我希望通过tab键获得标准的文本编辑器功能。@DJKRAZE a
TextBlock
?可编辑的富文本?谢谢,是否追加插入文本或仅将其追加到文本框的末尾?根据MSDN,它将
向文本控件的内容追加一个字符串。
您还必须手动增加光标/插入符号位置,我猜AppendText在Silverlight版本的
RichTextBox
上不存在-它只存在于WPF上版本这个答案是错的,谢谢,是否追加插入文本或仅将其追加到文本框的末尾?根据MSDN,它将
向文本控件的内容追加一个字符串。
您还必须手动增加光标/插入符号位置,我猜AppendText在Silverlight版本的
RichTextBox
上不存在-它只存在于WPF上版本这个答案是错误的。谢谢你刚刚测试过,效果很好。你显然知道这件事:OThanks刚刚测试过,效果很好。你显然知道这件事:哦