J'ai besoin de retirer l'espace occupé par une grille.row. Je suis capable de s'effondrer (supprimer) le contrôle que j'ai placé dans Grid.row, mais puisque RowDefinition a une taille fixe (hauteur) même après avoir retiré le contrôle de l'enfant, je peux toujours voir une rangée vide. P>
Y a-t-il un moyen d'effondrer une rowdefinition / grille.row? P>
Merci pour votre intérêt. P>
6 Réponses :
Vous pouvez voir ici un exemple de manipulation de lignes et de colonnes dans une grille. Même si la documentation est pour .NET (WPF), il est toujours pertinent pour WP7 / Silverlight. P>
Je penserai personnellement à deux fois avant d'utiliser une grille de cette manière. Peut-être que tout ce que vous essayez peut être atteint à l'aide d'un StackPanel ou de tout autre des commandes de conteneurs de la boîte. P>
Juste pour la fin, j'ai utilisé grid.rowdefinitions.removeat (index). Je conviens que la mise en place d'un StackPanel pourrait être une meilleure option pour ce scénario.
Vous auriez pu définir rowdefinition.height = "auto" code> et aurait pu assigner une hauteur fixe au visuel réel de cette rangée. De cette façon, lorsque le visuel est visiblement collé, la ligne n'occupe pas la largeur fixe attribuée à la défense de la ligne. P>
C'est la réponse simple à la question. Merci!. Je sais que c'est très vieux, mais vous avez fait une petite typo, écrit une largeur lorsque vous vouliez avoir une hauteur.
réglage Ajout de manière dynamique / élimination de la liste de la liste Il est plus facile et plus sûr d'étirer le contenu des premières lignes sur la ligne suivante / s. p> Ceci peut être effectué à l'aide d'un Datriggigrigment pour définir la grille.rowspan sur le premier élément de la grille. Vous trouverez ci-dessous un exemple complet - juste la coller dans une nouvelle fenêtre WPF pour la voir en action. P> rowdefinition.height = "auto" code> ne convient pas à tous les cas, comme souvent, nous voulons * dimensionner de nos lignes.
<Grid>
<Grid.Resources>
<BooleanToVisibilityConverter x:Key="visConverter"></BooleanToVisibilityConverter>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Background="Orange">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=toggle1, Path=IsChecked}" Value="False">
<Setter Property="Grid.RowSpan" Value="3"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
<GridSplitter Grid.Row="1" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch" Height="3"
Visibility="{Binding ElementName=toggle1, Path=IsChecked, Converter={StaticResource visConverter}}"></GridSplitter>
<Grid Name="bottomGrid" Grid.Row="2" Background="LightBlue"
Visibility="{Binding ElementName=toggle1, Path=IsChecked, Converter={StaticResource visConverter}}">
</Grid>
<ToggleButton Name="toggle1" VerticalAlignment="Top">Hide/Show</ToggleButton>
</Grid>
Définir Lorsque vous souhaitez effondrer un Lorsque vous souhaitez le rendre visible à nouveau: P> nom code> pour votre grille d'abord. Initialement, définissez les hauteurs de la ligne via l'attribut XAML:
rowdefinition code>: p>
A.Visibility = Visibility.Visible;
GridSize.RowDefinitions[0].Height = new GridLength(3, GridUnitType.Star);
C'est une façon très non-MVVM de le faire, juste pour le compte rendu.
Il est absolument correct d'appliquer un style avec des déclencheurs à votre Ce qui suit pourrait être utile si vous souhaitez masquer une section de résultats avant que les résultats n'existaient (c.-à-d. Un RowDefinition code> pour la ligne que vous souhaitez effondrer. Cela peut vous aider lorsque vous avez des valeurs étoiles pour vos hauteurs.
Observablecollection code>), par exemple. p>
Une solution simple (utilisez la hauteur que vous connaissez que vos commandes se développeront): puis assurez-vous que toutes les commandes à l'intérieur de cette ligne utiliseront Cela a fonctionné pour moi, car je n'ai besoin que de définir le drapeau pour effondrer / visible une seule fois, je ne sais pas comment cela fonctionnera si vous souhaitez basculer la visibilité au moment de l'exécution. p> p> visibilitty = "effondré" code> p>
Dupliqué possible de Masquer la rangée de grille dans WPF