Лучший способ показать огромный текст в WPF? - PullRequest
3 голосов
/ 06 сентября 2010

Мне нужно показать действительно огромное количество текстовых данных в WPF коде. Сначала я попытался использовать TextBox (и, конечно, это было слишком медленно при рендеринге). Теперь я использую FlowDocument - и это потрясающе - но недавно у меня был другой запрос: текст не должен переноситься. Возможно, это не так (document.IsHyphenationEnabled = false), но я все еще не вижу свою драгоценную горизонтальную полосу прокрутки. если я увеличу масштаб, то текст ... будет дефисен.

alt text

public string TextToShow
{
    set
    {
        Paragraph paragraph = new Paragraph();
        paragraph.Inlines.Add(value);

        FlowDocument document = new FlowDocument(paragraph);
        document.IsHyphenationEnabled = false;

        flowReader.Document = document;
        flowReader.IsScrollViewEnabled = true;
        flowReader.ViewingMode = FlowDocumentReaderViewingMode.Scroll;
        flowReader.IsPrintEnabled = true;
        flowReader.IsPageViewEnabled = false;
        flowReader.IsTwoPageViewEnabled = false;
    }
}

Вот как я создаю FlowDocument - и вот часть моего элемента управления WPF:

<FlowDocumentReader Name="flowReader" Margin="2 2 2 2" Grid.Row="0" />

Ничего криминального =))

Хотелось бы узнать, как приручить этого зверя - гуглил ничего полезного. Или у вас есть какой-то альтернативный способ показать мегабайты текста, или у текстового поля есть некоторые функции виртуализации, которые мне нужно просто включить. В любом случае, я буду рад услышать ваш ответ!

1 Ответ

1 голос
/ 07 сентября 2010

Это действительно перенос, а не перенос.И это можно преодолеть, установив для FlowDocument.PageWidth разумное значение. Единственный вопрос заключался в том, как определить это значение.Омер предложил этот рецепт msdn.itags.org / visual-studio / 36912 / , но мне не нравится использовать TextBlock в качестве инструмента для измерения текста.Гораздо лучший способ:

            Paragraph paragraph = new Paragraph();
            paragraph.Inlines.Add(value);


            FormattedText text = new FormattedText(value, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(paragraph.FontFamily, paragraph.FontStyle, paragraph.FontWeight, paragraph.FontStretch), paragraph.FontSize, Brushes.Black );

            FlowDocument document = new FlowDocument(paragraph);
            document.PageWidth = text.Width*1.5;
            document.IsHyphenationEnabled = false;

Омер - спасибо за указание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...