J'ai un formulaire WPF simple avec un Grid
déclaré sur le formulaire. Cela Grid
a un tas de lignes:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="30" />
<RowDefinition Height="Auto" Name="rowToHide" />
<RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>
La ligne nommée rowToHide
contient quelques champs d'entrée et je veux masquer cette ligne après avoir détecté que je n'ai pas besoin de ces champs. Il est assez simple de définir uniquement Visibility = Hidden
tous les éléments de la ligne, mais la ligne occupe toujours de l'espace dans le fichier Grid
. J'ai essayé de régler Height = 0
les éléments, mais cela n'a pas semblé fonctionner.
Vous pouvez y penser comme ceci: vous avez un formulaire, vous y trouverez une liste déroulante indiquant "Type de paiement", et si la personne sélectionne "Espèces", vous voulez masquer la ligne contenant les détails de la carte. Ce n'est pas une option pour démarrer le formulaire avec ce caché déjà.
Réponses:
La ligne n'a pas de propriété Visibility, donc comme d'autres l'ont dit, vous devez définir la hauteur. Une autre option consiste à utiliser un convertisseur, au cas où vous auriez besoin de cette fonctionnalité dans de nombreuses vues:
Et puis dans la vue appropriée
<Grid.RowDefinition>
:la source
BoolToGridLengthConverter
et d'ajouter unVisibleLength
-Property, pour revenir(bool)value == true
. C'est ainsi que vous pouvez également le réutiliser avecAuto
n'importe quelle valeur de correction.La meilleure et propre solution pour réduire les lignes ou les colonnes est d'utiliser un DataTrigger donc dans votre cas:
la source
INotifyPropertyChanged
dans votre code pour qu'il fonctionne quand ilSomeBoolProperty
est modifié :).Vous pouvez également le faire en référençant la ligne dans la grille, puis en modifiant la hauteur de la ligne elle-même.
XAML
VB.NET
Bien que la réduction des éléments dans la grille fonctionne également, c'est un peu plus simple si vous avez de nombreux éléments dans la grille qui ne comportent pas d'élément englobant pouvant être réduit. Cela constituerait une bonne alternative.
la source
RowDefinition
, comme<RowDefinition Height="*" /><!-- Height set in code behind -->
Pour référence,
Visibility
est une énumération System.Windows.Visibility à trois états :Consultez cette astuce et d'autres astuces sur le fil WPF Tips and Tricks .
la source
Au lieu de jouer avec la ligne de grille, vous pouvez définir la propriété Visibility des contrôles (champs de la ligne) sur "Réduit". Cela garantira que les contrôles ne prennent pas d'espace et si vous avez Grid Row Height = "Auto", alors la ligne sera masquée car tous les contrôles de la ligne ont Visibility = "Collapsed".
Cette méthode est meilleure car la visibilité des contrôles peut être liée à une propriété à l'aide d'un convertisseur.
la source
Faites simplement ceci:
rowToHide.Height = new GridLength(0);
si vous utilisez,
visibility.Collapse
vous devez le définir pour chaque membre de la ligne.la source
Définissez la visibilité du contenu de la ligne sur au
Visibility.Collapsed
lieu de Caché. Cela empêchera le contenu de prendre de l'espace et la ligne se réduira de manière appropriée.la source
J'ai eu une idée similaire en héritant de RowDefinition (juste pour l'intérêt)
Vous pouvez maintenant l'utiliser comme suit:
et basculer avec
la source