2013-10-25 2 views
1

Я пытаюсь отобразить большой объем данных в элементе управления WPF RichTextBox. Мои данные содержат пробелы. Существует поведение переноса слов по умолчанию, которое не позволяет «слово», разделяться и отображаться на других строках.WPF RichTextBox word wrapping

Такое поведение вызвано наличием пробелов, вопросительных знаков, полных остановок или любого другого предложения/разделителя слов. В приведенном ниже примере, если вы замените символ пробела буквой (например: «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 
+1

Возможный дубликат [C#/WPF: отключить текстовое обтекание RichTextBox] (http://stackoverflow.com/questions/1368047/c-wpf-disable-text-wrap-of-richtextbox) –

ответ

3

Я думаю, вам нужно отключить перенос слов в элементе управления RichTextBox, который всегда включен, в соответствии с документацией в :

Текст всегда заворачивает в RichTextBox. Если вы не хотите, чтобы текст обертывался , установите PageWidth на FlowDocument, чтобы он был больше ширины RichTextBox. Однако, как только ширина страницы будет достигнута, текст все еще обертывается.

Там нет явного собственности, чтобы отключить его, и вы можете сделать что-то вроде этого:

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

как предложено here.

+0

Привет, Альберто. Спасибо за ответ. Я уже пробовал этот подход, но я не хочу, чтобы содержимое отображалось только на одной строке. Мне нужно, чтобы он обернулся несколькими строками, не пытаясь предотвратить разделение слов. – Stefan

+0

@Stefan Добро пожаловать. Одна линия? PageWidth фиксирует только ширину страницы, на которой отображается содержимое. Установите, например, PageWidth = 500, ваше содержимое не будет отображаться только на одной строке (используется с Kaxaml). –

+0

Еще раз спасибо. Я просто попытался установить PageWidth на 500. Для этого конкретного шаблона данных он работает, поскольку все данные будут помещаться в 2 столбца. Это не работает, если шаблон данных отличается, и у нас больше символов пространства. Кроме того, это решение не работает при попытке изменить размер окна. Я бы ожидал, что содержимое будет автоматически изменяться, без фиксированного размера. Я не хочу полностью избавляться от обертывания, мне просто нужен способ заставить его не зависеть от разделителей предложений/слов (пробел, полная остановка, знак вопроса и т. Д.), Как показано в исходном вопросе. – Stefan