2009-12-02 9 views
2

Je dois afficher le texte avec les couleurs et le formatage dans un List. J'utilise un ListBox avec un RichTextControl pour afficher les données. J'ai également besoin du contenu pour la taille de la fenêtre, mais le texte n'a pas besoin d'envelopper.RichTextBox dans WPF ne pas redimensionner le contenu correctement

Lorsque je fais cet exemple simple, le texte apparaît vertical et ne change pas au fur et à mesure que je taille la fenêtre. Si je mets le Width du RichTextBox à une taille fixe comme 100 alors cela fonctionne.

Des idées?

<Window x:Class="WpfApplication19.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <ListBox HorizontalContentAlignment="Stretch"> 
      <ListBox.Items> 
       <RichTextBox> 
        <FlowDocument> 
         <Paragraph> 
          <Run>this is a test</Run> 
         </Paragraph> 
        </FlowDocument> 
       </RichTextBox> 
      </ListBox.Items>     
     </ListBox> 
    </Grid> 
</Window> 

S'il existe une meilleure option pour afficher du texte si des parties du texte sont de couleurs différentes, veuillez me le faire savoir.

+0

avez-vous besoin ListBox afin que vous puissiez avoir sélection etc, ou utilisez-vous juste pour maintenir les éléments de ReichTextBox? –

Répondre

3

Si vous n'avez pas besoin du comportement de sélection de liste des ListBox, puis en utilisant une ItemsControl fournit la mise en page correcte:

<Grid> 
    <ItemsControl> 
     <RichTextBox> 
      <FlowDocument> 
       <Paragraph > 
        <Run>this is a test</Run> 
       </Paragraph> 
      </FlowDocument> 
     </RichTextBox> 
    </ItemsControl> 
</Grid> 

Le mais pour obtenir ce que vous avez demandé, envelopper RichTextBox dans le Grid, puis associez à sa ActualWidth

<Grid> 
    <ListBox HorizontalContentAlignment="Stretch"> 
     <ListBox.Items> 
      <Grid> 
       <RichTextBox Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType=Grid}}" > 
        <FlowDocument> 
         <Paragraph> 
          <Run>this is a test</Run> 
         </Paragraph> 
        </FlowDocument> 
       </RichTextBox> 
      </Grid> 
     </ListBox.Items> 
    </ListBox> 
</Grid> 
+0

Avez-vous une idée de la raison pour laquelle vous devez définir la largeur sur RichTextBox lorsqu'il se trouve dans un élément de zone de liste? –

+0

Je ne suis pas sûr de ce que l'interaction de la ListBox avec RichTextBox provoque ce problème/exigence. –

+0

Vous pouvez également utiliser un ScrollViewer avec un StackPanel, puis gérer les enfants. C'est ce que j'ai fini par faire, mais je préfère la solution ItemsControl que vous avez posté ici. – Kelly

Questions connexes