2010-09-10 11 views
1

Je rencontre un problème lorsque j'ai des éléments tels que les zones de liste et les zones de texte enrichi que je veux définir automatiquement en taille xaml en fonction de la taille de la fenêtre, mais je veux seulement la redimensionner à la taille de la fenêtre et ensuite mettre des barres de défilement si le contenu est plus grand que cela. Malheureusement, la seule façon de faire fonctionner les barres de défilement est de définir une hauteur spécifique de la zone de liste/zone de texte enrichi (qui ne fonctionne pas parce que je veux la redimensionner automatiquement à la hauteur de la grille est contenu à l'intérieur, qui est généralement la hauteur de la fenêtre (auto)Redimensionnement automatique des éléments wpf avec des barres de défilement (zone de texte enrichi, zone de liste) vb

Toute aide serait grandement appréciée

Répondre

2

vous n'avez pas besoin d'utiliser des valeurs fixes pour Width et Height -.. vous devriez plutôt spécifier un minimum largeur/hauteur de vos contrôles en utilisant les propriétés MinWidth et MinHeight, puis essayez une disposition similaire à celle-ci:

<Window> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <Grid> 

      <ListBox MinWidth="500" MinHeight="250"/> 

      <!-- any other controls... --> 

     </Grid> 
    </ScrollViewer> 
</Window> 

Le Grid utilise généralement tout l'espace qu'il obtient si ses propriétés d'alignement sont fixés à Stretch et si au moins une ligne/colonne est configurée pour être étoile de taille. Dans ce cas, il n'y a qu'une seule ligne et une seule colonne, implicitement créées, toutes deux de taille étoile par défaut.
Pour faire fonctionner ScrollViewer, vous devez définir en quelque sorte une taille minimale de vos contrôles de contenu, car sinon le ScrollViewer n'a pas sais quand activer les ScrollBar s. Dans l'exemple ci-dessus, je l'ai fait en utilisant les propriétés MinHeight et MinWidth du ListBox, mais vous pouvez également définir ces propriétés sur GridRowDefinition s et/ou ColumnDefinition s. Maintenant, si vous redimensionnez la fenêtre, de sorte que Width devient plus petit que 500, vous verrez que les barres de défilement apparaîtront. Jetez un coup d'œil.

+0

Salut, merci pour votre réponse. Le problème est que je ne peux pas définir un MinWidth ou un MinHeight parce que je veux que le MinHeight soit relatif à la taille de la fenêtre ... ie. toujours prendre la parole disons la moitié supérieure de la fenêtre. Si c'est 1024 x 768 le minheight devrait être 334, si c'est 1440 x 900 il devrait être 450, etc. – Jay

+0

Bien sûr. Vous pouvez y parvenir en utilisant des rangées/colonnes de grille en étoile. Mais quand voulez-vous que les ScrollBars apparaissent? Si vous voulez * toujours * que le MinHeight soit relatif à la taille de la fenêtre, alors vous n'avez * jamais * besoin de ScrollBars, non? Car alors, même si la fenêtre est de 30x20, vos contrôles auront une hauteur de 10. Vous devez définir une taille minimale que vos contrôles doivent avoir. Si la fenêtre devient trop petite pour conserver cette taille, les ScollBars apparaîtront. Est-ce que j'ai râté quelque chose? – gehho

Questions connexes