Impossible d'obtenir vertical des barres de défilement dans un WPF TextBlock

Je vais présenter le texte dans un wpf contrôle TextBlock (.Net 3.5). Le contenu du textblock varie selon ce que l'utilisateur sélectionne dans une liste déroulante. Le texte passe à la ligne, donc je n'ai pas besoin d'une barre de défilement horizontale. Cependant, il y a souvent plus de texte que le montant de la fenêtre d'affichage, j'ai donc besoin d'une barre de défilement verticale.

Que j'ai commencé à chercher, j'ai rapidement constaté que la réponse est d'envelopper le TextBlock dans un ScrollViewer. Toutefois, Il Ne fonctionne Pas (TM) et je suis en espérant que quelqu'un peut m'aider à savoir pourquoi.

C'est la structure de l'INTERFACE utilisateur code:

<Window x:Class=..>
    <StackPanel>
        <ListBox HorizontalAlignment="Stretch"
                 VerticalAlignment="Top"  Height="200"
                 SelectionChanged="listbox_changed" SelectionMode="Single">
        </ListBox>
        <Button Click="Select_clicked">Select</Button>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <TextBlock Name="textblock" TextWrapping="Wrap"/>
        </ScrollViewer>
    </StackPanel>
</Window>

Lorsque l'utilisateur sélectionne un élément dans la zone de liste, certains de texte associée à cet élément est présenté dans le TextBlock. J'aurais pensé que le code tel qu'il est, doit avoir été tout ce qu'il faut, mais cela ne me donne une barre de défilement.

À la recherche et à l'expérimentation m'ont donné deux indices: la racine du problème pourrait être lié à moi de mettre à jour le contenu du TextBlock de façon dynamique, et que le TextBlock ne pas redimensionner lui-même basé sur le nouveau contenu. J'ai trouvé une annonce qui nous a semblé pertinent qui a dit que par le réglage de la Hauteur de la TextBlock pour son ActualHeight (après avoir changé de son contenu), il serait de travailler. Mais il n'a pas (je vois pas d'effet de la présente).

Deuxième, si je définis la hauteur (lors de la conception) du ScrollViewer, puis je fais une barre de défilement verticale. Par exemple, si je l'ai mis à 300 personnes dans le xaml ci-dessus, le résultat est presque bon dans la fenêtre de premier ouvert contient un TextBlock avec une barre de défilement verticale si (et seulement si) j'en ai besoin. Mais si je agrandissez la fenêtre (de la redimensionner avec la souris au cours de l'exécution), le ScrollViewer ne pas exploiter la nouvelle taille de la fenêtre et, au lieu de continue sa hauteur que par le xaml qui, évidemment, ne peut pas faire.

Espérons-le, j'ai juste oublié quelque chose d'évident..

Merci!

OriginalL'auteur Kristoffer | 2011-04-11