首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用CellSpacing实现自定义网格?

如何用CellSpacing实现自定义网格?
EN

Stack Overflow用户
提问于 2011-04-27 20:07:26
回答 4查看 4.7K关注 0票数 5

我怀念WPF中的HTML-cellspacing。我正试图在WPF的网格中实现一些类似的东西,方法是创建一个自定义的网格类,覆盖网格,然后修改MeasureOverride和ArrangeOverride以获得我想要的行为。这就是网格中的每个单元格应该与其他单元格具有固定的间距(而不是填充)。如何做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-10 16:28:51

我找到了一篇关于创建自定义网格面板来处理单元格之间间距的博客文章:http://daniel-albuschat.blogspot.dk/2011/07/gridlayout-for-wpf-escape-margin-hell.html

票数 2
EN

Stack Overflow用户

发布于 2011-04-27 21:20:54

您可能会编写自己的panel,或者甚至是Grid的后代,使用单元格间距进行自己的布局。这将是一项相当大的工作。

下面是我通常要做的事情,以达到同样的目的。假设我想要一个3像素的单元格间距。您可以通过对每个单元格应用1.5像素边距(因此单元格与其相邻单元之间的总间距为1.5 + 1.5 =3像素),然后在整个网格周围再应用1.5像素边距,以使外部边距正确(单元格周围的1.5像素边距+网格周围的1.5边距=3像素)来完成此操作。XAML如下所示:

代码语言:javascript
复制
<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>

它很难看,但它是有效的。

如果网格中的大多数控件都是同一类型的(例如,如果都是标签,或者都是标签和TextBoxes),那么你可以使用样式,而不是在网格中的每个元素上声明和重新声明边距:

代码语言:javascript
复制
<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的方法,然后如果你需要更花哨的东西,你可以调整边距。

票数 2
EN

Stack Overflow用户

发布于 2021-01-23 08:54:00

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5803829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档