我想让Grids具有固定数量的列和行。例如,80列和24行。 在设计视图中,用户必须无法更改列和行定义,但他必须能够将控件插入单元格中。
设计视图应该看起来像this http://imageshack.us/f/29/coldefs.png
我试图将Grid子类化并在构造函数中设置Column和Row Definitions,但是然后细胞根本没有显示在DesignView中。
可以这样做吗?
答案 0 :(得分:2)
您可以继承Grid
以添加依赖项属性Rows
和Columns
,并在PropertyChanged回调中相应地更新RowDefinitions
和ColumnDefinitions
。
要在设计时获取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
。
修改强>
在添加和删除元素时,Children属性(ContentProperty
的{{1}})会在框架中重置。这意味着Grid-Borders也会被清除干净,据我所知,没有办法得到通知。要解决这个问题,我必须将Grid
ContentProperty
更改为新的DP,然后更新Child和DesignMode Grid-Borders。
可以进行多项优化,例如每次清除和读取Grid-Borders。无论如何,这是更新的代码。它现在应该在设计器中工作,如果设置了很多行/列可能有点慢但是这可以通过一些优化来修复。
<强> FixedSizeGrid 强>
FixedSizeGrid
答案 1 :(得分:0)
如果要查看单元格或正方形
,可以将ShowGridLines
属性设置为true