如何在代码中设置固定的列/行定义并在DesignView中使用它们

时间:2011-08-12 09:42:02

标签: c# wpf grid

我想让Grids具有固定数量的列和行。例如,80列和24行。 在设计视图中,用户必须无法更改列和行定义,但他必须能够将控件插入单元格中。

设计视图应该看起来像this http://imageshack.us/f/29/coldefs.png

我试图将Grid子类化并在构造函数中设置Column和Row Definitions,但是然后细胞根本没有显示在DesignView中。

可以这样做吗?

2 个答案:

答案 0 :(得分:2)

您可以继承Grid以添加依赖项属性RowsColumns,并在PropertyChanged回调中相应地更新RowDefinitionsColumnDefinitions

要在设计时获取GridLines,如果您处于设计模式(Border),则可以向Loaded事件中的每个单元格添加DesignerProperties.GetIsInDesignMode(this) == true

像这样使用

<local:FixedSizeGrid Rows="24"
                     Columns="80"
                     Background="#E8E8E8">
    <Button Grid.Row="1" Grid.Column="1"/>
    <Button Grid.Row="1" Grid.Column="2"/>
    <Button Grid.Row="1" Grid.Column="3"/>
</local:FixedSizeGrid>

设计师的输出如下所示。在运行时,你将得不到Borders

enter image description here

修改
在添加和删除元素时,Children属性(ContentProperty的{​​{1}})会在框架中重置。这意味着Grid-Borders也会被清除干净,据我所知,没有办法得到通知。要解决这个问题,我必须将Grid ContentProperty更改为新的DP,然后更新Child和DesignMode Grid-Borders。

可以进行多项优化,例如每次清除和读取Grid-Borders。无论如何,这是更新的代码。它现在应该在设计器中工作,如果设置了很多行/列可能有点慢但是这可以通过一些优化来修复。

<强> FixedSizeGrid

FixedSizeGrid

答案 1 :(得分:0)

如果要查看单元格或正方形

,可以将ShowGridLines属性设置为true