104 votes

WPF: masquer la ligne de la grille

J'ai un simple formulaire WPF avec un <Grid> déclaré sur le Formulaire.

Dans cette Grille, je puis avoir un tas de Lignes:

   <Grid.RowDefinitions>
        <RowDefinition Height="Auto" MinHeight="30" />
        <RowDefinition Height="Auto" Name="rowToHide"/>
        <RowDefinition Height="Auto" MinHeight="30" />
    </Grid.RowDefinitions>

Donc, fondamentalement, la ligne avec le nom "rowToHide" a quelques champs de saisie, et maintenant je veux cacher cette ligne que je n'ai pas besoin de ces champs. Son assez simple pour juste mettre tous les éléments dans la Ligne de Visibilité = Caché, mais la Ligne est toujours prend de la place dans la Grille. Donc le besoin de faire quelque chose comme le réglage de la Hauteur = 0 ou quelque chose. Mais cela ne semble pas fonctionner.

Vous pouvez y penser comme ceci: Vous avez un formulaire, là nous avons une liste déroulante en disant: "Type de Paiement", et si la personne choisit de "Cash", puis masquer la ligne contenant les détails de la Carte. Et ce n'est pas une option pour démarrer le formulaire avec ce cachées déjà.

Merci à tous!

94voto

testpattern Points 499

Row n'a pas de propriété de visibilité. Par conséquent, comme d'autres l'ont déjà dit, vous devez définir la hauteur. Une autre option consiste à utiliser un convertisseur, au cas où vous auriez besoin de cette fonctionnalité dans plusieurs vues:

     [ValueConversion(typeof(bool), typeof(GridLength))]
    public class BoolToGridRowHeightConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((bool)value == true) ? new GridLength(1, GridUnitType.Star) : new GridLength(0);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {    // Don't need any convert back
            return null;
        }
    }
 

Et ensuite, dans la vue appropriée <Grid.RowDefinition> :

 <RowDefinition Height="{Binding IsHiddenRow, Converter={StaticResource BoolToGridRowHeightConverter}}"></RowDefinition>
 

55voto

TravisPUK Points 405

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

 <Grid Grid.Column="2" Grid.Row="1" x:Name="Links">
   <Grid.RowDefinitions>
      <RowDefinition Height="60" />
      <RowDefinition Height="*" />
      <RowDefinition Height="*" />
      <RowDefinition Height="80" />
   </Grid.RowDefinitions>
</Grid>
 

VB.NET

 If LinksList.Items.Count > 0 Then
   Links.RowDefinitions(2).Height = New GridLength(1, GridUnitType.Star)
Else
   Links.RowDefinitions(2).Height = New GridLength(0)
End If
 

Bien que la réduction des éléments dans la grille fonctionne également, cela est un peu plus simple si vous avez plusieurs éléments dans la grille qui ne contiennent pas d'élément englobant qui puisse être réduit. Cela fournirait une bonne alternative.

31voto

Metro Smurf Points 14234

Pour référence, Visibility est un trois-état du Système.De Windows.La visibilité de l'énumération:

  • Visible - L'élément est rendu et participe à la mise en page.
  • S'est effondré - L'élément est invisible et ne participe pas à la mise en page. Effectivement en lui donnant une hauteur et une largeur de 0 et de se comporter comme si elle n'existe pas.
  • Caché - L'élément est invisible, mais continue à participer à la mise en page.

Voir cette astuce et d'autres conseils sur le WPF trucs et Astuces fil.

7voto

USER_NAME Points 596

Faites simplement ceci:
rowToHide.Height = new GridLength(0);

Si vous utilisez visibility.Collapse vous devez le définir pour chaque membre de la ligne.

6voto

Reed Copsey Points 315315

Définissez la visibilité du contenu de la ligne sur Visibility.Collapsed au lieu de masqué. Cela empêchera le contenu de prendre de la place et la ligne sera réduite de manière appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X