WPF RichTextBox 自动换行 [英] WPF RichTextBox word wrapping

查看:221
本文介绍了WPF RichTextBox 自动换行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 WPF RichTextBox 控件中显示大量数据.我的数据包含空格字符.有一个默认的自动换行行为,不允许一个单词"被拆分并显示在更多行上.

I am trying to display a large amount of data in a WPF RichTextBox control. My data contains space characters. There is a default word wrapping behavior that does not allow a "word", to be split and displayed on more lines.

此行为由空格字符、问号、句号或任何其他句子/单词分隔符触发.在下面的示例中,如果您用字母(例如:X")替换空格字符,则所有内容都将按预期显示.由于没有找到分隔符,所以允许大词"被截断并显示在多行上.

This behavior is triggered by having space characters, questions marks, full stops or any other sentence/word delimiter. In the example below, if you replace the space character with a letter ( ex: "X" ), everything will be displayed as expected. As no delimiter characters are found, the big "word" is allowed to be truncated and displayed on multiple lines.

有没有办法禁用这个词/句子换行行为?

Is there a way of disabling this word/sentence wrapping behavior?

这是 XAML 代码:

This is the XAML code:

<Window x:Class="StackOverQuestion_TextBoxWrap.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="535">
    <Grid>
        <RichTextBox Name="RichTextBox" />
    </Grid>
</Window>

这是后面的cs代码:

 public MainWindow()
  {
     InitializeComponent();

     Random rnd = new Random();

     RichTextBox.FontFamily = new System.Windows.Media.FontFamily( "Lucida Console" );

     Paragraph par = new Paragraph();
     for ( int i = 0 ; i < 6000 ; i++ )
     {
        Run run = new Run();
        run.Text = rnd.NextDouble().ToString() + " " ;

        par.Inlines.Add( run );
     }
     RichTextBox.Document.Blocks.Add( par );
  }

不希望的换行行为:(请注意行的不同长度)

Undesired wrapping behaviour: (please notice the different length of the lines)

0.562230281327958 0.269015421750497 0.130114109315963 0.527640242375266 0.592048898149305
0.73868335026255 0.478530279117883 0.939313878276997 0.890535918479104 0.00047110533363703
0.546423877378192 0.780972927241108 0.697112546626997 0.66897076306351 0.634957212319112
0.498651245375467 0.808829494662969 

所需的换行行为:(请注意行的长度相同)

Desired wrapping behaviour: (please notice the same length of the lines)

0.562230281327958 0.269015421750497 0.130114109315963 0.527640242375266 0.592048898149305
0.73868335026255 0.478530279117883 0.939313878276997 0.890535918479104 0.0004711053336370
3 0.546423877378192 0.780972927241108 0.697112546626997 0.66897076306351 0.63495721231911
2 0.498651245375467 0.808829494662969 

推荐答案

根据 MSDN:

文本总是包含在 RichTextBox 中.如果您不希望文本换行然后设置 PageWidthFlowDocument 大于宽度的 RichTextBox.但是,一旦达到页面宽度,文本仍然包装.

Text always wraps in a RichTextBox. If you do not want text to wrap then set the PageWidth on the FlowDocument to be larger than the width of the RichTextBox. However, once the page width is reached the text still wraps.

没有明确的属性来禁用它,你可以这样做:

There's no explicit property to disable it, and you can do something like this:

richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
richTextBox1.Document.PageWidth = 1000;

按照此处的建议.

这篇关于WPF RichTextBox 自动换行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆