如何定义TAB在XAML TextBox中跳转的空格数?

时间:2010-02-24 12:15:36

标签: wpf xaml textbox tabs

当用户在此文本框中按标签时,光标会跳过相当于 8个空格

如何更改它以使其仅跳转4或2?

<TextBox
    Width="200"
    Height="200"
    Margin="0 0 10 0"
    AcceptsReturn="True"
    AcceptsTab="True"
    Text="{Binding OutlineText}"/>

5 个答案:

答案 0 :(得分:2)

您可以创建自己的TextBox控件以获得所需的效果:

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        //Defaults to 4
        TabSize = 4;
    }

    public int TabSize
    {
        get;
        set;
    }

    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Tab)
        {
            String tab = new String(' ', TabSize);
            int caretPosition = base.CaretIndex;
            base.Text = base.Text.Insert(caretPosition, tab);
            base.CaretIndex = caretPosition + TabSize + 1;
            e.Handled = true;
        }
    }
}

然后你只需在你的xaml中使用以下内容:

<cc:MyTextBox AcceptsReturn="True" TabSize="10" x:Name="textBox"/>

请参阅以下原始答案:http://social.msdn.microsoft.com/Forums/en/wpf/thread/0d267009-5480-4314-8929-d4f8d8687cfd

答案 1 :(得分:0)

我建议你看看Typography property of the TextBox。即使我无法立即找到任何关于选项卡大小的内容,这是影响TextBox文本呈现方式的属性,因此它可能也是您正在寻找的东西。

答案 2 :(得分:0)

尝试使用允许您设置标签大小的控件。也许http://wpfsyntax.codeplex.com/ 会吗?

答案 3 :(得分:0)

Jason提供的解决方案的一个问题是修改Text将删除撤消堆栈。另一种解决方案是使用Paste方法。为此,首先需要将选项卡字符串复制到剪贴板。

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        //Defaults to 4
        TabSize = 4;
    }

    public int TabSize { get; set; }

    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Tab)
        {
            var data = Clipboard.GetDataObject();
            var tab = new String(' ', TabSize);
            Clipboard.SetData(DataFormats.Text, tab);
            Paste();
            //put the original clipboard data back
            if (data != null)
            {
                Clipboard.SetDataObject(data);
            }
            e.Handled = true;
        }
    }
}

答案 4 :(得分:-1)

是的,有可能......

TextBlock.Text =“ABC”+ string.Format(“{0}”,“\ t”)+“XYZ”;

它会做我们需要的!!