C# WinRT XAML文本框,选择开始和CR/LF

C# WinRT XAML文本框,选择开始和CR/LF,c#,string,xaml,textbox,windows-store-apps,C#,String,Xaml,Textbox,Windows Store Apps,我在我的一个Windows应用商店应用程序中使用了一个简单的多行文本框,我想使用选项卡缩进文本 由于WinRT在文本框上没有XAMLAcceptsTab属性,我想当我检测到Tab键敲击时,我必须手动处理它 问题是:\r\n似乎被SelectionStart属性处理为一个字符而不是两个字符,我没有得到真正的字符位置。 我现在唯一的想法是通过解析文本并为插入符号之前出现的每个\r\n事件向SelectionStart添加1来规范SelectionStart public static class T

我在我的一个
Windows应用商店应用程序中使用了一个简单的多行
文本框
,我想使用
选项卡
缩进文本

由于WinRT在
文本框
上没有XAML
AcceptsTab
属性,我想当我检测到Tab键敲击时,我必须手动处理它

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

我现在唯一的想法是通过解析文本并为插入符号之前出现的每个
\r\n
事件向
SelectionStart
添加1来规范
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;
    }
}

它是有效的,但是。。。我又重新发明了那个圆东西吗?有更干净的方法吗?

似乎您必须执行“Ctrl+Tab”操作,才能在文本框中实际插入选项卡。因此,你所要做的就是这样

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

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

即使问题已过时,您也应该验证答案是否满足了您的需要,以便将来的用户查看,并将问题从未回答列表中删除。
TextBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
      if (e.KeyCode == Keys.Tab)
      {
          e.Handled = true;
          SendKeys(^{TAB});
      }
}