2010-07-18 9 views
1

Ok, j'utilise la grille pour lister divers contenus. Comment puis-je obtenir des colonnes spécifiques à redimensionner alors que d'autres restent fixes. C'est-à-dire que la forme apparaît avec des tailles de colonnes initiales spécifiques pour les contrôles ... si l'utilisateur REDUIT le formulaire ... je veux que certains champs de type 'mémo' se développent. Comment faire ça? Il semble que je puisse seulement obtenir que toutes les 'secondes' colonnes augmentent en hauteur ... pas seulement 1 (la dernière) ... ou des colonnes spécifiques.WPF - Redimensionnement des colonnes et des lignes dans une grille

Merci pour toute aide !!

Voici la mise en page ... comment puis-je redimensionner le texte 'long' avec le redimensionnement de la forme, et garder le bouton collé au bas du formulaire ??? tx

<DockPanel VerticalAlignment="Top"> 
    <Grid DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition MinWidth="150" ></ColumnDefinition>   
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition MinHeight="80" Height="Auto"></RowDefinition> 
     <RowDefinition ></RowDefinition> 
     </Grid.RowDefinitions> 

     <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
     <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
     <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

     <TextBox Height="Auto" Grid.Column="1" Grid.Row="0" /> 
     <TextBox Height="Auto" Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
     <TextBox Height="Auto" Grid.Column="1" Grid.Row="2" /> 

    </Grid> 
    <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" MinHeight="20" Margin=" 0,0,10,10"> 
     <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
     <Button Content="Cancel" Width="75" IsCancel="True" /> 
    </StackPanel> 
    </DockPanel> 

(ajouté après le 1er « réponse ») Maintenant, si je retire le StackPanel bas (Ok, boutons Annuler) sur l'équation pour rendre cela plus facile et je régler la 1ère et 2ème lignes à une valeur fixe ... j'ai l'impression d'être capable de faire fonctionner ça (je ne veux pas avoir à régler une hauteur maximale) ... oh et j'ai besoin de changer l'alignement vertical pour 'étirer'. Mais dès que je l'ajoute StackPanel pour les boutons à nouveau ... l'étirement ne fonctionne plus ... donc est ici la prochaine version révisée ...

<DockPanel VerticalAlignment="Stretch"> 
    <Grid DockPanel.Dock="top" VerticalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition MaxHeight="30"></RowDefinition> 
      <RowDefinition MinHeight="80" Height="*"></RowDefinition> 
      <RowDefinition MaxHeight="30"></RowDefinition> 
     </Grid.RowDefinitions> 

     <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
     <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
     <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

     <TextBox Grid.Column="1" Grid.Row="0" /> 
     <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
     <TextBox Grid.Column="1" Grid.Row="2" /> 
    </Grid> 

    <StackPanel DockPanel.Dock="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,0,10,10"> 
     <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
     <Button Content="Cancel" Width="75" IsCancel="True" /> 
    </StackPanel> 
</DockPanel> 

Je suis toujours des problèmes ...

Répondre

3

Utilisez * pour la largeur de la colonne au lieu de Auto, qui indique à la colonne de prendre l'espace restant après le réglage des autres colonnes.

Si vous avez besoin de plusieurs colonnes pour partager l'espace disponible dans différents pourcentages, vous pouvez préfixer le * avec un nombre, comme dans "2 *" et "3 *". Par défaut, "" signifie 1.

HTH,
Berryl

+0

Salut, merci de répondre. Problème Voici comment spécifier la hauteur de redimensionnement de NO sur toutes les lignes sauf une certaine. * est uniquement pris en charge pour la définition de colonne et la définition de ligne, alors comment pouvez-vous obtenir une section transversale? 2e rangée, 2e col pour agir uniquement de cette façon. Comme le montre l'exemple, les boutons du bas ne collent pas vers le bas, ET la dernière rangée, la dernière col ne se redimensionne pas. remplacer l'auto par '*' n'aide pas. – appWoW

+0

J'ai révisé l'exemple de code ci-dessus ... mais j'ai toujours des problèmes. – appWoW

+0

Salut appWow. Je me suis un peu perdue avec ce que vous essayez de faire ici. Spécifier le redimensionnement de NO, sauf pour un signifie que cette ligne et cette seule ligne ont Height = "*". Cela est différent du dimensionnement des cellules individuelles dans la grille - la meilleure façon de le faire est d'imbriquer une grille dans l'autre et d'utiliser la taille des étoiles sur cette cellule (2ème rangée, 2ème Col). Largeur = "*". HTH – Berryl

0

Je semble être seulement en mesure de résoudre les problèmes par incorporting StackPanel dans sa propre ligne de la grille, et la colonne. Voici ma solution. Pas sûr si le panneau dock est nécessaire dans ce cas ... mais sans bricoler plus ... c'est ma solution actuelle. Si quelqu'un peut m'expliquer comment le faire fonctionner avec le panneau de la pile OK, Annuler les boutons 'en dehors' de la grille, j'aimerais le savoir. En attendant, cette solution est disponible pour ceux d'entre vous qui cherchent dans ce genre de problème. Comme vous le voyez, vous devez utiliser Auto dans toutes les autres définitions de ligne. * où vous voulez qu'il se développe.

<DockPanel VerticalAlignment="Stretch"> 
     <Grid DockPanel.Dock="top" VerticalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"></ColumnDefinition> 
       <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition MinHeight="80" Height="*"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
      </Grid.RowDefinitions> 

      <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
      <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
      <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

      <TextBox Grid.Column="1" Grid.Row="0" /> 
      <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
      <TextBox Grid.Column="1" Grid.Row="2" /> 

      <StackPanel Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,10,0,0"> 
       <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
       <Button Content="Cancel" Width="75" IsCancel="True" /> 
      </StackPanel> 
     </Grid> 
    </DockPanel> 
+0

Le DockPanel, fait ce que vous voulez (en quelque sorte) car il fait le LastChildFill = "true" par défaut. Votre StackPanel est le dernier enfant. L'idée est juste en ce que vous avez un panneau (la grille) imbriqué à l'intérieur d'un autre (le DockPanel). Si vous souhaitez un contrôle plus précis comme vous le souhaitez, modifiez également le DockPAnel en Grille. HTH – Berryl

0

Si vous voulez être en mesure de re-taille que l'une des places faites par les définitions de ligne et de colonne, vous devez ajouter une grille ou tout autre élément de récipient à l'intérieur d'un des carrés. Ensuite, vous allez faire en sorte que la grille à l'intérieur du carré soit redimensionnée en conséquence. De cette façon, toutes les définitions ne seront pas redimensionnées, à la place, la grille et ses éléments seront redimensionnés et ne changeront donc pas les autres éléments. Ce n'est pas commun, mais vous pouvez avoir autant de panneaux et de grilles de pile et définir leur visibilité en cas de besoin. Parfois, quand quelque chose ne fonctionne pas, les enferme dans quelque chose d'autre et expérimente avec. Vous pourriez l'obtenir par accident, mais vous l'aurez toujours.

Questions connexes