RichTextBox против FlowDocumentScrollViewer - Почему они выглядят такими разными?
У меня есть очень простой файл xaml, в котором я передаю одни и те же элементы Paragraph и Run в RichTextBox и FlowDocumentScrollViewer. Оба выглядят совершенно по-разному - это не то, что я ожидал.
Я понимаю, что вы можете стилизовать либо FlowDocument, либо контейнеры, чтобы они выглядели одинаково, но я ожидал, что они оба наследуют одинаковые настройки по умолчанию.
Вот мой код:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="80" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<RichTextBox Grid.Row="0">
<FlowDocument>
<Paragraph>
<Run>Here is some text</Run>
<LineBreak />
<Run>Here is some more text</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
<TextBlock Grid.Row="1" Padding="6,0,0,0">
<Run>Here is some text</Run>
<LineBreak />
<Run>Here is some more text</Run>
</TextBlock>
<FlowDocumentScrollViewer Grid.Row="2" IsHitTestVisible="True" VerticalScrollBarVisibility="Hidden">
<FlowDocument>
<Paragraph>
<Run>Here is some text</Run>
<LineBreak />
<Run>Here is some more text</Run>
</Paragraph>
</FlowDocument>
</FlowDocumentScrollViewer>
</Grid>
Мой вопрос
Есть ли какой-нибудь способ убедиться, что и RichTextBox, и FlowDocumentScrollViewer отображают FlowDocument одинаково? В идеале, чтобы вы не могли определить разницу между ними - без необходимости "жестко кодировать" поля, шрифты и т. Д. В одну или другую.
Вы заметите, что в моем примере выше мой Textblock требует некоторого Margin, чтобы он отображал то же самое, что RichTextBlock, но я действительно хочу избежать необходимости делать что-то подобное, поскольку, несомненно, возникнет ситуация, когда некоторые шрифты или настройки языка ломает все это ужасно
1 ответ
Я не эксперт в WPF, тем более что я действительно использую RichTextBox, но привязка свойств одного из них к стилям (возможно, даже шаблонным) может решить вашу проблему.
Свойства по умолчанию FlowDocument отличаются от свойств RTB или TB. (Шрифт по умолчанию для FlowDocument - Грузия!!!)
<RichTextBox>
<FlowDocument Name="rtDoc"
PagePadding="{Binding PagePadding, ElementName=flDoc}"
...
FontFamily="{Binding FontFamily, ElementName=flDoc}">
...
</FlowDocument>
</RichTextBox>
...
<FlowDocumentScrollViewer>
<FlowDocument Name="flDoc" />
</FlowDocumentScrollViewer>
Надеюсь, вы можете использовать это!