2010-08-07 3 views
3

Я заметил, что у WinForms RichTextBox есть свойство ZoomFactor, которое, как я предполагаю, является именно тем, что я хочу - к сожалению, это, похоже, полностью отсутствует в варианте WPF.Возможно ли «увеличить» текст в WPF RichTextBox?

Есть ли способ достичь такой же функциональности (увеличение/уменьшение видимого размера текста всего документа без фактического изменения базового RTF)?

Update: При установке в LayoutTransform на RichTextBox, похоже, работают в очень простых условиях, это не совсем то же самое, как установка ZoomFactor из пары вещей:

  • Во-первых, полоса прокрутки увеличено также. Это выглядит глупо.
  • Во-вторых, в моем приложении (по какой-то причине, но не в Kaxaml - я исследую это, чтобы выяснить, почему), текст bitmap увеличен, так что он просто расширяет отображаемый текст в отличие от векторно- масштабируя его так, чтобы он был гладким. Вот пример того, что я говорю о (обратите внимание на то, как-большой пользовательской полосы прокрутки):

alt text http://img822.imageshack.us/img822/298/3b7e4e04afc943ff85b2a98.png

Update 2: Хорошо, я обнаружил, что растровое масштабирование было быть вызвано устанавливающих TextOptions .TextFormattingMode до Display вместо Ideal. Устанавливая его на идеальное, мы снова вводим векторное масштабирование.

Однако есть еще что надоедливая полоса прокрутки! Я имею в виду, что один из вариантов - отключить прокрутку на RichTextBox и обернуть его в ScrollViewer, но мне интересно, будет ли это ухудшаться. Я также задаюсь вопросом, будет ли обработка текста работать, если я это сделаю.

+1

Перенос текста работает просто отлично. (Более сложная проблема заключается в том, что вы хотите отключить перенос текста и использовать горизонтальную прокрутку.) И производительность не кажется ничем иным, и я не могу думать о причине, которая должна быть. Одна вещь, которую вы, вероятно, захотите сделать, это отредактировать шаблон управления для «RichTextBox», чтобы у него не было каких-либо пограничных хром, так как это тоже масштабируется, что является дорким взглядом на 30-кратное увеличение. –

+0

Моя забота о производительности заключается в том, что, возможно, RichTextBox выполняет какую-то внутреннюю виртуализацию для больших документов, которая не состоялась бы, если бы я вручную ее обернул в ScrollViewer. – devios1

+0

Теперь все работает нормально, за исключением досадного факта, что я не могу использовать режим отображения для RichTextBox (я даже не могу установить его в режим отображения, когда коэффициент масштабирования равен 1.0 из-за ошибки/ограничения RichTextBox и TextOptions), однако это относительно незначительно. До сих пор нет очевидного снижения производительности для больших файлов RTF, но тогда RichTextBox всегда был довольно медленным с большими документами RTF. – devios1

ответ

3

Это поможет вам начать:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <DockPanel LastChildFill="True"> 
    <Slider x:Name="Scale" DockPanel.Dock="Bottom" Minimum="1" Maximum="20"/> 
    <RichTextBox> 
     <RichTextBox.LayoutTransform> 
     <ScaleTransform ScaleX="{Binding ElementName=Scale, Path=Value}" ScaleY="{Binding ElementName=Scale, Path=Value}"/> 
     </RichTextBox.LayoutTransform> 
    </RichTextBox> 
    </DockPanel> 
</P 
+1

Эй, это работает! Я действительно удивлен, потому что я не могу понять основную логику того, как добавление преобразования влияет на * wrapping * текста. – devios1

+0

На самом деле у меня сейчас проблемы, см. Обновленную запись. – devios1

+0

@ devios1 вы выяснили проблему с увеличением прокрутки? – JobaDiniz

3

Я заметил, что WinForms RichTextBox имеет свойство ZoomFactor, что я предполагаю, это именно то, что я хочу, - к сожалению, это, кажется, полностью отсутствует на вариантной WPF.

Вам нужно вернуться и прочитать основы WPF. Пункт по позиции. Остановитесь в ТРАНСФОРМАХ. Причина, по которой ZoomFactor отсутствует в TextBox, заключается в том, что КАЖДЫЙ КОНТРОЛЬ WPF может быть ТРАНСФОРМАТИВНЫМ (масштабирование, 3d-преобразования) и АНИМАЦИЕЙ с помощью стандартных стандартных мер, поэтому особый подход просто не нужен.

+1

Я подумал об этом, но не увеличил бы масштаб текстового поля при помощи преобразования просто сделать все равно равномерно больше? Я хочу, чтобы текст все еще обертывался должным образом и т. Д. – devios1

Смежные вопросы