2013-02-27 46 views
1

我正在用TreeView創建一個圖形。以下是一個屏幕截圖。到目前爲止,一切都是在造型上完成的。我將TreeView的ItemsPanel設置爲一個水平的StackPanel。 (回形針只是放置物品持有人沒有圖像。)WPF TreeView有兩個分開的ItemsPanel分支和葉子

Screen shot of tree view graph

通知底層的孩子,是樹葉。他們自己沒有任何孩子。

這裏是問題:我想要這些項目進入一個單獨的WrapPanel。問題是一件物品顯然可以有孩子和沒有孩子的孩子(樹枝和葉子)。 ItemsPanel仍然需要是一個StackPanel,所以你可以得到一個很好的水平佈局。但是StackPanel中的最後一個控件需要是一個帶有所有無子項子項的WrapPanel。

這是一個屏幕截圖,我拼湊在一起顯示在一個WrapPanel中的樹葉。

Screen shot of tree view with wrap panel

事情我已經試過

我試圖創建自己的物品板轉換,但轉換整個項目小組到畫布面板。

我試着只是添加一個單獨的樹視圖到ItemTemplate並將其綁定到一個單獨的集合,但這不是正確的樣子。

東西我還沒有試過

我談論的WrapPanel幾乎就像一個分支。但分支本身是空的,但包含兒童。也許我可以根據屬性更改節點的樣式。然後,而不是顯示圖片或任何,它的數據模板將是一個WrapPanel

+0

你可以發佈你的treeview的xaml嗎?如何使用在#_of_children == 0上觸發的樣式觸發器或在您的模型屬性IsLeaf或類似觸發器上觸發。在觸發器觸發你改變ItemsPanel。 – michele 2013-02-27 14:24:32

+0

這很好@michele,那麼什麼?無論如何,葉子不會使用項目面板。儘管葉子在項目面板中。但我不能簡單地更改父項的項目面板。父母基本上需要2個項目面板。一個用於分支,另一個用於葉子。 – 2013-02-27 15:12:29

+1

@michele你讓我想到了一些東西。如果在像「IsLeafCollection」這樣的節點上添加標誌,它會將項目面板更改爲WrapPanel。讓我看看。 – 2013-02-27 15:16:26

回答

0

我想通了。

  1. 我打開了我的分級數據集並做了一些更改。對於每個分支,我刪除了它的葉子並將它們添加到一個新節點。然後我將節點添加回分支。它有點創建一個佔位符。

  2. 該節點包含一個名爲「IsLeafCollection」的屬性。它只是驗證每個孩子都沒有孩子。

  3. 我有一個綁定到IsLeafCollection的數據觸發器。如果它是真的,那麼它將項目面板更改爲包裝面板。

以下是最終結果的截圖。

Screen shot of tree view