2011-10-26 19 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> 

トグル矢印を非表示にするにはどうすればコールドドリンクツリービューアイテムを取得できますか?

+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)と戻りますをループItemのいずれかが表示されている場合は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をリストに設定し、折りたたまれた項目をフィルタリングする必要があります。

関連する問題