【问题标题】:WPF RichTextBox word wrappingWPF RichTextBox 自动换行
【发布时间】:2013-11-04 13:28:09
【问题描述】:

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

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

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

这是 XAML 代码:

<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 );
  }

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

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 

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

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 

【问题讨论】:

标签: c# wpf richtextbox word-wrap


【解决方案1】:

根据MSDN 中的文档,我认为您需要禁用 RichTextBox 控件中的自动换行,该控件始终处于启用状态:

文本总是包裹在 RichTextBox 中。如果您不想换行 然后将FlowDocument上的PageWidth设置为大于宽度 富文本框。但是,一旦达到页面宽度,文本 仍然包装。

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

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

按照here的建议。

【讨论】:

  • 嗨,阿尔贝托。感谢您的答复。我已经尝试过这种方法,但我不希望内容只显示在一行上。我需要它在多行中换行,而不是试图防止单词分裂。
  • @Stefan 不客气。一条线? PageWidth 仅固定显示内容的页面的宽度。设置例如 PageWidth = 500,您的内容将不会仅显示在一行上(使用 Kaxaml 尝试)。
  • 再次感谢。我刚刚尝试将 PageWidth 设置为 500。对于这个特定的数据模式,它似乎可以工作,因为所有数据都适合 2 列。如果数据模式不同并且我们有更多的空格字符,则它不起作用。此外,此解决方案在尝试调整窗口大小时不起作用。我希望内容会自动调整大小,而没有固定大小。我不想完全摆脱换行行为,我只需要一种使其不依赖于句子/单词分隔符(空格、句号、问号等字符)的方法,如原始问题所示。
猜你喜欢
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2023-03-12
相关资源
最近更新 更多