WinRT XAML文本框,SelectionStart和CR / LF

时间:2013-03-08 10:16:42

标签: c# string xaml textbox windows-store-apps

我在TextBox之一中使用了简单的多行Windows Store Apps,我想启用tab缩进文字。

由于WinRT在AcceptsTab上没有XAML TextBox属性,我认为当我检测到Tab键击时,我必须每手处理它。

问题是:\r\n似乎是由SelectionStart属性处理为一个字符而不是两个,我没有得到真正的char位置。

我现在唯一的想法是通过解析文本来标准化SelectionStart,并为我在插入符号之前看到的每个SelectionStart添加\r\n。{ / p>

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;
}

它有效但是......我又重新发明了那个圆形的东西吗?有更清洁的方法吗?

1 个答案:

答案 0 :(得分:0)

似乎你必须做一个&#34; Ctrl + Tab&#34;实际插入文本框中的选项卡。因此,你所要做的就是这样的事情

TextBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
      if (e.KeyCode == Keys.Tab)
      {
          e.Handled = true;
          SendKeys(^{TAB});
      }
}

^表示CTRL键,TAB代表您的Tab键。使用此组合,您可以在应用程序中正常使用Tab