2011-04-05 193 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。

但是,您仍然必須自行實施拖放機制。