我想念 WPF 中的 HTML 单元格间距。我试图通过从 Grid 覆盖自定义 Grid 类,然后修改 MeasureOverride 和 ArrangeOverride 来实现我想要的行为,从而在 WPF 的 Grid 中实现类似的东西。也就是说,网格中的每个单元格之间应该有一个固定的间距(不是填充)。怎么可能做到这一点?
4 回答
您可能可以编写自己的panel,或者甚至是 Grid 的后代,用单元格间距进行自己的布局。这将是一项相当大的工作。
这是我通常做的事情,以实现同样的目标。假设我想要一个 3 像素的单元格间距。您可以通过对每个单元格应用 1.5 像素边距来实现这一点(因此单元格与其邻居之间的总空间为 1.5 + 1.5 = 3 像素),然后在整个 Grid 周围再增加 1.5 像素边距,因此外边距是正确的(单元格周围 1.5 像素边距 + 网格周围 1.5 边距 = 3 像素)。XAML 如下所示:
<Grid Margin="1.5">
...
<Label Grid.Row="0" Grid.Column="0" Margin="1.5">...</Label>
<TextBox Grid.Row="0" Grid.Column="1" Margin="1.5">...</TextBox>
...
</Grid>
这很丑陋,但它有效。
如果您的 Grid 中的大多数控件属于同一类型(例如,如果它是所有标签,或者所有标签和文本框),那么您可以使用样式,而不是在网格中的每个元素上声明和重新声明 Margin:
<Grid Margin="1.5">
<Grid.Resources>
<Style TargetType="Label">
<Setter Property="Margin" Value="1.5"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Margin" Value="1.5"/>
</Style>
</Grid.Resources>
...
<Label Grid.Row="0" Grid.Column="0">...</Label>
<TextBox Grid.Row="0" Grid.Column="1">...</TextBox>
...
</Grid>
实际上,我在实践中发现我经常需要不均匀的边距——例如,我可能想要顶部、左侧和右侧的 3 像素边距,但底部没有边距(因为它下面的控件已经有自己的利润)。所以我通常不会全部使用 1.5 像素;我通常会得到更复杂的东西。所以我可以明白为什么他们没有添加 CellSpacing;它会使简单的情况变得更简单,但在更复杂的布局中将无用。
但是 half-margins-all-around 是实现 CellSpacing 的一种快速方法,然后如果您需要更高级的东西,您可以调整边距。
我发现这篇关于创建处理单元格之间间距的自定义网格面板的博客文章:http: //daniel-albuschat.blogspot.dk/2011/07/gridlayout-for-wpf-escape-margin-hell.html
您可能对我的回答感兴趣,支持自定义网格中每个子项的统一边框和单元格间距:
您正在寻找 Margin 属性。您可以设置 DataGridCell 类的样式。
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Setter Property="Margin" Value="3" />
</Style>