我应该使用哪种控件来实现分割器的网格布局?

时间:2012-06-17 19:35:40

标签: c# wpf xaml

我需要实现我的草图上显示的布局。

  1. 多列 - 用户可以调整宽度
  2. 垂直分隔为2个区域 - 用户可以调整高度
  3. 每列中都有多个项目 - 我将使用List
  4. 我应该使用网格吗?或者DataGrid会更合适吗?我担心Grid会给我分解我想要的方式的问题,但是我想知道DataGrid是否会因为这种情况而“沉重”?

    此外,一切都将采用重点风格,因此这样做很容易。

    修改

    忘了提几件事:

    1. 列数不会被修复,但会受到限制 - 最多7个
    2. 我会将注意力注入那些“细胞”
    3. 是否可以在MVVM场景中隐藏/显示列?我正在考虑是否使用GridSplitter并绑定拆分器可见性,因为我可以隐藏拆分器并从列中移除内容,如果它的“宽度”设置为“自动” - 我将实现“隐藏”它的情况。
    4. enter image description here

2 个答案:

答案 0 :(得分:1)

恕我直言,考虑到列数是固定的,Grid是这里的方法。你需要有一些逻辑来设置第一行的MaxHeight,这样用户将无法在网格底部拖动水平分割器(是的,我知道,它应该是默认行为...... :()。

每列的MaxWidth也是如此。只有它更复杂,因为你必须考虑所有列的实际宽度。此外,当拖动其中一个垂直分割器时,您需要更新所有列的宽度,因此网格的总宽度保持不变。

DataGrid将是矫枉过正的,你将不会获得任何有价值的东西 - 首先看一下垂直分离器将被照顾 - 但是你必须考虑滚动条,禁用它们会弄乱能够重新调整列的大小。此外,水平分割器仅在行标题中可用,而不是在控件的所有宽度上可用。此外,计算第一行的高度必须手动完成,然后以某种方式强制数据网格。

现在我考虑一下,我可能会使用自定义面板(MyPanel)和继承Thumb的自定义拆分器(MySplitter)。

对于列表,我可能会使用HeaderedContentControl和自定义控件模板。

答案 1 :(得分:0)

您可以使用任何您想要的控件。实际上,你可以将DataGrid与特殊类一起用于你的情况,它被称为GridSplitter(如本例所示:CodeBetter)。您可以使用DataTemplates自定义单元格甚至行,以存档效果最佳