Я решил эту проблему, временно вставив заполнитель.
private const string TAB = " ";
private const string TAB_PLACEHOLDER = "===TAB===";
Я использовал заполнитель для временной замены всех символов табуляции, а затем, как только они появились в RichTextBox, я заменил все заполнители на вкладки.
textBox1.Text = richTextBox1.Xaml;
string xaml = richTextBox1.Xaml;
xaml = xaml.Replace(TAB, TAB_PLACEHOLDER);
richTextBox2.Xaml = xaml;
foreach (Block block in richTextBox2.Blocks)
{
foreach (Inline inline in ((Paragraph)block).Inlines)
{
((Run) inline).Text = ((Run) inline).Text.Replace(TAB_PLACEHOLDER, TAB);
}
}