编码文本在RichTextBox从WPF工具包

本文关键字:WPF 工具包 RichTextBox 文本 编码 | 更新日期: 2023-09-27 18:12:17

我想在WPF工具包的RichTextBox中编写一些带有度(°)符号的文本。

我只是试过

Section section = new Section();
Paragraph paragraph = new Paragraph();
section.Blocks.Add(paragraph);
string str = string.Format("Temperature : {0:0.00}°C", temp);
text = new Run(str);
paragraph.Inlines.Add(text);
TemperatureText = System.Windows.Markup.XamlWriter.Save(section);

但是度数符号被替换为"?"。我还试图直接编写unicode string.Format("Temperature : {0:0.00}'u00B0C", temp),但它也失败了。

你知道吗?谢谢!

[编辑]

我使用XamlFormatter的RichTextBox

编码文本在RichTextBox从WPF工具包

尝试实现您自己的格式化器,它的行为类似于XAMLFormatter,但使用UTF8编码:

public class MyXamlFormatter : ITextFormatter
{
    public string GetText( System.Windows.Documents.FlowDocument document )
    {
      TextRange tr = new TextRange( document.ContentStart, document.ContentEnd );
      using( MemoryStream ms = new MemoryStream() )
      {
        tr.Save( ms, DataFormats.Xaml );
        return Encoding.UTF8.GetString(ms.ToArray());
      }
    }
    public void SetText( System.Windows.Documents.FlowDocument document, string text )
    {
      try
      {
        if( String.IsNullOrEmpty( text ) )
        {
          document.Blocks.Clear();
        }
        else
        {
          TextRange tr = new TextRange( document.ContentStart, document.ContentEnd );
          using( MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(text)))
          {
            tr.Load( ms, DataFormats.Xaml );
          }
        }
      }
      catch
      {
        throw new InvalidDataException( "Data provided is not in the correct Xaml format." );
      }
    }
}

在XAML中:

<wtk:RichTextBox.TextFormatter>
    <myNameSpace:MyXamlFormatter/>
</wtk:RichTextBox.TextFormatter>