【问题标题】:WPF How to set a UniformGrid spacing between colums and rowsWPF 如何在列和行之间设置统一的网格间距
【发布时间】:2020-11-25 23:03:26
【问题描述】:

是否可以在UniformGrid 上设置列和行之间的特定间距?

UniformGrid 的默认行为是这样的:

<UniformGrid Columns="2" Rows="2">
    <Button Content="1"/>
    <Button Content="2"/>
    <Button Content="3"/>
    <Button Content="4"/>
</UniformGrid>

但我希望它看起来像这样:

【问题讨论】:

    标签: c# wpf spacing uniformgrid


    【解决方案1】:

    不,不是直接在UniformGrid 中,但您可以将Margin 添加到其子项中。如果您需要多个子级的相同间距,只需将它们提取到一个样式中。对于您的示例,它看起来像这样:

    <UniformGrid Columns="2" Rows="2">
       <Button Content="1" Margin="0, 0, 10, 10"/>
       <Button Content="2" Margin="10, 0, 0, 10"/>
       <Button Content="3" Margin="0, 10, 10, 0"/>
       <Button Content="4" Margin="10, 10, 0, 0"/>
    </UniformGrid>
    

    一般来说,如果您不想为每个控件定义样式并且希望子控件的间距一致,您可以将它们嵌套在Borders 中,并为其应用一个通用的边距样式。

    <UniformGrid Rows="1" Columns="3">
       <UniformGrid.Resources>
          <Style x:Key="BorderSpacingStyle" TargetType="{x:Type Border}">
             <Setter Property="Margin" Value="10"/>
          </Style>
       </UniformGrid.Resources>
       <Border Style="{StaticResource BorderSpacingStyle}">
          <Button Content="0"/>
       </Border>
       <Border Style="{StaticResource BorderSpacingStyle}">
          <Button Content="1"/>
       </Border>
       <Border Style="{StaticResource BorderSpacingStyle}">
          <Button Content="2"/>
       </Border>
    </UniformGrid>
    

    【讨论】:

    • 举个例子,我用边距做的和你做的一模一样。我想这就是要走的路!