当用户在此文本框中按标签时,光标会跳过相当于 8个空格。
如何更改它以使其仅跳转4或2?
<TextBox
Width="200"
Height="200"
Margin="0 0 10 0"
AcceptsReturn="True"
AcceptsTab="True"
Text="{Binding OutlineText}"/>
答案 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”;
它会做我们需要的!!