42 votes

Espacement entre les contrôles enfants dans la grille WPF

J'ai un ensemble de paires clé / valeur que je souhaite afficher sur une fenêtre WPF. J'utilise une grille pour les disposer comme suit:

 <Grid Margin="4">
	<Grid.ColumnDefinitions>
		<ColumnDefinition Width="Auto"/>
		<ColumnDefinition/>
	</Grid.ColumnDefinitions>
	<Grid.RowDefinitions>
		<RowDefinition Height="Auto"/>
		<RowDefinition Height="Auto"/>
	</Grid.RowDefinitions>

	<Label Grid.Row="0" Grid.Column="0">Code</Label>
	<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Code}"/>

	<Label Grid.Row="1" Grid.Column="0">Name</Label>
	<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Name}"/>
</Grid>
 

Cependant, lorsque j'affiche ceci, les zones de texte sont écrasées avec leurs bordures supérieure et inférieure touchant la zone de texte ci-dessus / ci-dessous. Quel est le meilleur moyen d'ajouter de l'espace vertical aux lignes de cette mise en page?

56voto

Matt Hamilton Points 98268

Le moyen le plus simple consiste à définir une marge sur les contrôles individuels. Le placer sur les zones de texte devrait suffire, car une fois espacées, les étiquettes seront placées verticalement au centre de chaque ligne et disposeront de beaucoup d'espace.

Vous pouvez le définir une fois en utilisant un style:

 <Grid Margin="4">
    <Grid.Resources>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Margin" Value="0,0,0,4" />
        </Style>
    </Grid.Resources>

    ...
</Grid>
 

Cela ajoutera une marge de 4 pixels au bas de toute zone de texte dans votre grille.

38voto

Elad Katz Points 4105

Une autre belle approche peut être vu ici: http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/05/29/what-is-the-easiest-way-to-set-spacing-between-items-in-stackpanel.aspx

Il montre comment créer un comportement attaché à un, de sorte que la syntaxe de ce genre:

<StackPanel local:MarginSetter.Margin="5">
   <TextBox Text="hello" />
   <Button Content="hello" />
   <Button Content="hello" />
</StackPanel>

C'est la méthode la plus simple & la plus rapide façon de définir la Marge de plusieurs enfants d'un groupe spécial, même si elles ne sont pas du même type. (I. e. Boutons, zones de texte, zones de liste modifiables, etc.)

1voto

Norman Points 33

Qu'en est-il de la définition de VerticalAlignment de TextBox au centre?

 <Grid Margin="4">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>

                <Label Grid.Row="0" Grid.Column="0">Code</Label>
                <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Code}" VerticalAlignment="Center"/>

                <Label Grid.Row="1" Grid.Column="0">Name</Label>
                <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Center"/>
            </Grid>
 

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: