我在我的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