2011-10-26 81 views
3

我遇到了一個問題,我希望有人能幫我解決。我遇到了一個案例,其中我的節點包含一組可見性設置爲false的子節點。我希望我可以禁用TreeViewItem旁邊的切換箭頭,如果它的所有子節點都不可見的話。這可能嗎?這裏有一個例子:WPF TreeViewItem切換按鈕的可見性

<TreeView Margin="10,10,0,13" Name="TreeView1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="194" Height="200"> 
    <TreeViewItem Header="Cold Drinks"> 
     <TreeViewItem Header="Coke" Visibility="False"></TreeViewItem> 
     <TreeViewItem Header="Pepsi" Visibility="False"></TreeViewItem> 
    </TreeViewItem> 
</TreeView> 

我將如何得到冷飲料TreeViewItem隱藏切換箭頭?

+0

我不知道一個簡單的方法。我知道的唯一方法是更改​​TreeViewItem的ControlTemplate。這裏有一個指向控制模板的鏈接:http://msdn.microsoft.com/en-us/library/ms752048.aspx – Josh

回答

2

如果您看到TreeViewItem的deafult controlTemplate,您會看到Toggle按鈕的可見性綁定到ItemsControl.HasItems。觸發這個樣子 -

<Trigger Property="ItemsControl.HasItems"> 
    <Setter TargetName="Expander" Property="UIElement.Visibility" Value="{x:Static Visibility.Hidden}" /> 
    <Trigger.Value> 
     <s:Boolean>False</s:Boolean> 
    </Trigger.Value> 
</Trigger> 

所以,作爲一種解決方法,你可以創建自己的自定義控制從TabItem的衍生並用自己的CLR屬性綁定您的HasItems將通過所有的childItems(TreeViewItems),並返回循環如果任何項目可見,則爲true;如果所有項目均處於隱藏/摺疊狀態,則爲False。這樣你的切換按鈕會按照觸發器自動隱藏。

如果你想知道如何創建自定義的控制並將其綁定到你的CLR屬性,你可以參考這個 -

WPF TreeView databinding to hide/show expand/collapse icon

這有點相同,你一直在尋找的東西。希望這有助於..

+0

你可能也想看看這個 - http://www.codeproject.com/KB/WPF /TreeViewWithViewModel.aspx –

0

在內部(即鍵盤導航),並在其默認的模板樹型視圖是依靠其HasItems屬性知道它是否有子女或沒有。您可能需要將TreeViewItem的ItemsSource設置爲列表並過濾掉摺疊的項目。