WPF:如何使用CellSpacing实现自定义网格?

时间:2011-04-27 12:07:26

标签: wpf cellspacing

我想念WPF中的HTML-cellspacing。我试图在WPF的网格中实现类似的东西,通过从Grid进行自定义Grid类重写,然后修改MeasureOverride和ArrangeOverride来获得我想要的行为。这就是网格中的每个单元格应该与每个其他单元格具有固定的间距(不填充)。怎么可以这样做?

4 个答案:

答案 0 :(得分:2)

您可以编写自己的panel,或者甚至是Grid后代,它可以使用单元格间距创建您自己的布局。这将是一项相当多的工作。

这是我通常做的事情,以达到同样的目的。假设我想要一个3像素的单元格间距。您可以通过对每个单元格应用1.5像素边距(因此单元格与其邻居之间的总空间为1.5 + 1.5 = 3像素),然后在整个网格周围再生成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="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;它会使简单的情况变得更简单,但在更复杂的布局中会毫无用处。

但是半边缘全能是实现CellSpacing的快捷方式,如果你需要更高级的东西,你可以调整边距。

答案 1 :(得分:2)

我发现此博客文章有关创建处理单元格之间间距的自定义网格面板:http://daniel-albuschat.blogspot.dk/2011/07/gridlayout-for-wpf-escape-margin-hell.html

答案 2 :(得分:0)

您可能对我在这里的回答感兴趣,支持自定义网格中每个子项的统一边框和单元格间距:

How could I put a border on my grid control in WPF?

答案 3 :(得分:-2)

您正在寻找保证金属性。您可以设置DataGridCell类的样式。

<Style TargetType="{x:Type toolkit:DataGridCell}">
        <Setter Property="Margin" Value="3" />
    </Style>