我在其中一个中使用了一个简单的多行TextBox
,Windows Store Apps
我希望能够使用tab
来缩进文本。
由于 WinRT 上没有 XAMLAcceptsTab
属性,TextBox
我想当我检测到 Tab 击键时,我必须手动处理它。
问题是:\r\n
似乎由 SelectionStart 属性作为一个字符而不是两个字符来处理,我没有得到真正的char
位置。
我现在唯一的想法是SelectionStart
通过解析文本并为我在插入符号之前看到SelectionStart
的每个事件添加 1 来规范化 。\r\n
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
操作后重置为 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;
}
它有效,但是……我又重新发明了那个圆形的东西吗?有没有更清洁的方法来做到这一点?