none
WPF RichTextBox对齐问题 RRS feed

  • 问题

  • Hi Bob Bao,

    在使用WPF的RichTextBox时,发现对齐是一件很困难的事情,同样的格式化输出(比如Padleft和PadRight等),在Console.writeline和输出到文本文件中(如果字体不一样,显示有可能就对不齐了)是OK的。

    做过一些实验,使用RichTextBox对齐,发现大小写字母、数字等占位个数不一样。当内容是变量变化时,有时输出数字,有时输出字母,那就对不齐了。

    好像C#在WinForm中的TextBox中是OK的?

     

    2012年1月10日 6:57

答案

  • 是的,WPF中文字的绘制基于的是字体的字形信息,而不是像GDI模式下的基于屏幕位置的字体绘制。而且我们知道,系统中依据字形宽度分两种类型的字体, 等宽字体和非等宽字体,现代来说,非等宽字体看上去比较美观,但是难以控制每行的字符个数,和你这里的对齐问题。 这些问题在等宽字体中是不存在的。

    WPF的RichTextBox使用的是FlowDocument流文档形式,他会依据内容的不同来动态的显示和分布内容区域。这一点跟Word软件是一致的,他会根据每行宽度来计算显示单词的数量。如果你是使用了等宽字体,效果会好很多。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2012年1月11日 5:56
    版主

全部回复

  • 是的,WPF中文字的绘制基于的是字体的字形信息,而不是像GDI模式下的基于屏幕位置的字体绘制。而且我们知道,系统中依据字形宽度分两种类型的字体, 等宽字体和非等宽字体,现代来说,非等宽字体看上去比较美观,但是难以控制每行的字符个数,和你这里的对齐问题。 这些问题在等宽字体中是不存在的。

    WPF的RichTextBox使用的是FlowDocument流文档形式,他会依据内容的不同来动态的显示和分布内容区域。这一点跟Word软件是一致的,他会根据每行宽度来计算显示单词的数量。如果你是使用了等宽字体,效果会好很多。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2012年1月11日 5:56
    版主
  • Thanks Bob.

    改为等宽字体(如Courier New等)后,可以对齐了。

    2012年1月11日 11:25