2011-04-05 186 views
0

我正在WPF 4.0中创建一个自定义控件,它将看起来像下面的图像。它基本上由“泳道”组成。每个ItemsControl都有一些元素,可以通过该元素的可视化渲染,在除行标题之外的每个元素的同一行内拖放元素。有固定数量的列和可变数量的行。自定义WPF控件

enter image description here

我想的是两种不同的方法解决这个问题:

  1. 使用DataGrid和很多修改,这样它会支持这种行为。

  2. 创建一个具有动态行数的网格,并将每个项目实现为5个控件组(每列一个)。

注意事项: 使用MVVM,整个事情应该能够绑定到列表。

这种情况下最合理的方法是什么?

如果有任何疑问,请发表评论!

+0

我不会使用会涉及太多黑客IMO的DataGrid。当你说他们可以拖放你的意思时,给定行中的现有项目可以在该行内重新排序? – 2011-04-05 20:19:52

+0

确切地说,也是在每个单元格的其中一个itemscontrols中进行排序的。 – Bas 2011-04-05 20:25:42

+0

噢好吧我没有意识到每个单元格都是自己的物品控制。现在我回过头来看看这个图更有意义。现在就制定一个答案 – 2011-04-05 20:44:45

回答

1

所以它听起来像你有几个“控制”,你应该建立,这将使这个更大,复合控制更容易管理。

大部分你有被执行的阻力和给定的行内跨项目的控件拖放(真的是复杂的部分是限制在其他行项目控制滴)

所以首先我将建立一个ItemsControlGroup复杂的行为控制。类似于说每个控件是类似组的一部分的广播组。您可能只需为组名称附加属性即可完成此操作。这将为您提供一种方法来确定目标是否为拖动的给定项目的有效拖放位置。

所有建筑物都应该与建造这条“游泳道”布局不同。

一旦你有项目控制拖放工作,然后你可以建立几种不同的方式布局。如Zebi指出的那样,DataGrid在这一点上实际上可能不太难处理。

你也可以逃脱一套嵌套堆栈面板或某种网格布局。布局将是容易的部分。

+0

公顷,我有这回答同样的事情:) – poindexter12 2011-04-05 20:54:46

1

如果你想使用WPF数据网格不难实现你想要的布局,如果你使用TemplateColumn有给你列2-5:

<dg:DataGridTemplateColumn Header="...."> 
    <dg:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <!-- your custom control --> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellEditingTemplate> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <!-- ... --> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

项目源网格可以是一个简单的列表/的ObservableCollection。

但是,您仍然必须自行实施拖放机制。