2009-10-21 13 views
3

J'ai un fichier xaml très simple où je passe les mêmes éléments Paragraph et Run à la fois à un RichTextBox et à un FlowDocumentScrollViewer. Les deux semblent radicalement différents - ce qui n'est pas ce à quoi je m'attendais.RichTextBox vs FlowDocumentScrollViewer - Pourquoi sont-ils si différents?

Je comprends que vous pouvez styliser le FlowDocument ou les conteneurs pour qu'ils soient identiques, mais je m'attendais à ce qu'ils héritent tous deux des mêmes paramètres 'par défaut'.

Voici mon code:

<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> 

Ma question

est-il un moyen d'assurer que les deux RichTextBox et FlowDocumentScrollViewer afficher le FlowDocument de la même manière? Idéalement, vous ne pouvez pas faire la différence entre eux - sans devoir coder en dur les marges, les polices, etc. dans l'un ou l'autre. Vous remarquerez dans mon exemple ci-dessus que mon bloc de texte nécessite une certaine marge pour que l'affichage soit le même que pour le RichTextBlock, mais je veux vraiment éviter d'avoir à faire quelque chose comme ça car il y aura sans aucun doute une situation où le réglage de la police ou de la culture brise tout cela horriblement.

Répondre

2

Je ne suis pas expert en matière de WPF, d'autant plus que j'utilise vraiment la RichTextBox mais que la liaison des propriétés de l'un à l'autre avec des styles (peut-être même des modèles) peut résoudre votre problème.

Les propriétés par défaut de FlowDocument diffèrent de celles de RTB ou TB. (La police par défaut pour FlowDocument étant Georgia !!!)

<RichTextBox> 
     <FlowDocument Name="rtDoc" 
         PagePadding="{Binding PagePadding, ElementName=flDoc}" 
         ... 
         FontFamily="{Binding FontFamily, ElementName=flDoc}"> 
      ... 
     </FlowDocument> 
    </RichTextBox> 
     ... 
    <FlowDocumentScrollViewer> 
     <FlowDocument Name="flDoc" /> 
    </FlowDocumentScrollViewer> 

Espérons que vous puissiez l'utiliser!