WPF Grid中子控件之间的间距

我有一组键/值对我想要在WPF窗口上显示。 我正在使用一个网格,如下所示:

<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> 

但是,当我显示这个,文本框被挤压与他们的顶部和底部边界接触上方/下方的文本框。 在此布局中向行添加垂直空间的最佳方式是什么?

最简单的方法是在单独的控件上设置一个边距。 在文本框上设置它应该是足够的,因为一旦它们分开,标签将在每行的中心垂直放置,并且有足够的空间。

您可以使用一种风格设置一次:

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

这将在网格内的任何TextBox的底部添加一个4像素的边距。

另一个不错的方法可以在这里看到: http : //blogs.microsoft.co.il/blogs/eladkatz/archive/2011/05/29/what-is-the-easiest-way-to-set-spacing-between-项function于stackpanel.aspx

它显示了如何创build一个附加的行为,以便像这样的语法将工作:

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

这是将Margin设置为面板的几个孩子的最简单和最快的方法,即使它们不是同一types。 (即button,文本框,combobox等)

将TextBox的VerticalAlignment设置为中心怎么样?

 <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>