Что является эквивалентом кода XAML для сохранения пробелов? - PullRequest
2 голосов
/ 12 ноября 2011

Что такое код C #, эквивалентный следующему XAML, где у меня есть RichTextBox, и я выбрал Paragraph, и я хочу включить / отключить пробел в этом абзаце. В XAML я знаю, как включить, но мне нужно сделать это в коде.

<Paragraph xml:space=\"preserve\">     Tabbed Code</Paragraph>

Есть эквивалент, который я нашел, и он здесь,

void EnableWhiteSpace(Paragraph p, bool enable = true){
   if(enable){
         System.Windows.Markup.XmlAttributeProperties
              .SetXmlSpace(this.Document, "preserve");
   }
   else{
         System.Windows.Markup.XmlAttributeProperties
              .SetXmlSpace(this.Document, "default");
   }
}

Это все еще не работает !!! Я не получаю вкладки !! ...

Вот моя проблема, у меня есть RichTextBox, который используется для редактирования кода и который выделяет синтаксис. Все хорошо, за исключением того, что когда я звоню по следующему, я не вижу вкладок в моем коде.

 TextRange tr = new TextRange(
                         myRichTextBox.Document.ContentStart,
                         myRichTextBox.Document.ContentEnd);
 string text = tr.Text;

Текст, который я получаю, не содержит вкладок, поэтому я подумал, что включение пробелов в каждом абзаце перед выполнением диапазона текста может дать мне вкладки.

UPDATE

Я пробовал перемещаться по всем строкам (прогонам) в абзаце, ни один из них не содержит вкладок, я просто теряю все вкладки: (

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

Нет эквивалента.Параметр XML xml:space="preserve" действителен только для интерпретации файлов XML (в вашем случае XAML, который является разновидностью XML) и не имеет смысла в C #, поскольку в нем не задействованы файлы XML.

C # -эквивалент вашего XAML-кода будет следующим:

Paragraph p = new Paragraph();
p.Inlines.Add(new Run("     Tabbed Code"));
0 голосов
/ 01 декабря 2011

RichTextBox глючит, он просто игнорирует все вкладки, однако его проблема с самим WPF и не может быть исправлена ​​без сложных обходных путей.

Alernative - написать свой собственный FlowDocument для текстового конвертера, однако этосложный, поскольку узлы напрямую не дают никакой информации о строках или тегах.

...