我在我的Windows Store Apps
之一中使用简单的多行TextBox
,我想使用tab
来缩进文本。WinRT XAML Textbox,SelectionStart和CR/LF
由于WinRT在TextBox
上没有XAML AcceptsTab
属性,所以我觉得当我检测到Tab键时,我必须手动处理它。
问题是:\r\n
似乎是由SelectionStart属性处理为一个字符而不是两个,我没有得到真正的char
位置。
我现在唯一的想法就是通过解析文本并添加1到SelectionStart
每个\r\n
OCCURENCES我插入符之前看到的正常化SelectionStart
。
public static class TextBoxExtension
{
public static int GetNormalizedSelectionStart(this TextBox textBox)
{
int occurences = 0;
string source = textBox.Text;
for (var index = 0; index < textBox.SelectionStart + occurences ; index++)
{
if (source[index] == '\r' && source[index + 1] == '\n')
occurences++;
}
return textBox.SelectionStart + occurences;
}
}
最后SelectionStart
被reseted为0操作之后,所以我必须使用非标准化的位置来设置它回到正确的位置,这一次。这是来电者:
if (e.Key == VirtualKey.Tab)
{
int cursorIndex = MainTextBox.SelectionStart;
int cursorIndexNormalized = MainTextBox.GetNormalizedSelectionStart();
MainTextBox.Text = MainTextBox.Text.Insert(cursorIndexNormalized, "\t");
MainTextBox.SelectionStart = cursorIndex + 1;
e.Handled = true;
}
它的作品,但是......我重新发明了那个圆形的东西吗?是否有一个更清洁的方式做到这一点?
这些问题即使是旧的,你应该验证答案回答你有或没有需要为未来的用户看到并采取这个问题了解答名单。 – micbobo 2015-05-11 12:47:27