2011-12-19 18 views
2

コンテンツコントロールをツリービュー内に追加しようとしていますが、ツリービューアイテムをコンテンツコントロール内に追加すると、他のツリービューアイテムからさらに離れて配置されます。WPF内のContentControl TreeView

<TreeView> 
    <TreeViewItem Header="XXX-1"></TreeViewItem> 
    <TreeViewItem Header="XXX-2"></TreeViewItem> 
    <ContentControl> 
     <TreeViewItem Header="YYY-1"></TreeViewItem> 
    </ContentControl>    
    <TreeViewItem Header="XXX-3"></TreeViewItem> 
</TreeView> 

上記のコードは、以下のようなツリービューになります。

 
XXX-1 
XXX-2 
    YYY-1 
XXX-3 

私はContentControlが単独で別のTreeViewItemを追加すると思います。 TreeViewItemをどのように整列させることができますか?

+1

ContentControlにTreeViewItemを追加する目標は何ですか? – Josh

+0

@Josh:私がOrchestratorに書いたコメントをご覧ください。 – exoz

+0

あなたのために働くはずの答えを以下に記入してください。 – Josh

答えて

2

私はRachelの答えから始めますが、ContentControlを削除します。これは、2つのDataTemplateとTreeViewItemのItemTemplateSelectorプロパティに割り当てられたItemTemplateSelectorで実現できます。

複雑なタイプと単純なタイプを2つのDataTemplateに定義します。次に、TreeViewItemで複合型または単純型を使用する必要があるかどうかを判断するDataTemplateSelectorから継承するクラスを作成します。次に、TreeViewItemのItemTemplateSelectorを、作成したばかりのDataTemplateSelectorオブジェクトに設定します。ここに例があります:http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemtemplateselector.aspx

次のリンクは、条件に基づいてDataTemplateを選択する方法を示しています。http://msdn.microsoft.com/en-us/library/ms742521.aspx。ヘッダーを検索データオブジェクトのプロパティに基づくDataTemplateの選択

0

あなたはおそらく取得するテンプレートを上書きする必要がありますので、それは巣ツリービューアイテムでContentControlに(以下Snoopのスクリーンショットを参照)

はスヌープはまた、余分なマージンは+/-パンダのためであることを私に告げるんTreeViewItemsをネストしたままにしたい場合は、余白を取り除きます。もちろん

enter image description here

あなたは、単にあなたのツリービューアイテムの内側ContentControlにを配置しようとしている場合、タグは、他の方法で回避する必要があります。

<TreeViewItem Header="YYY-1"> 
    <ContentControl /> 
</TreeViewItem> 
+0

テンプレートを上書きすることはどういう意味ですか? TreeView内のContentTemplateのレンダリングを変更してプレースホルダとしてのみ機能するようにすることはできますか? Btw私はSnoopについて知らなかった、それは非常に便利なツールです。 – exoz

+0

@ user1106026既定では、WPFコントロールは「無意味」です。つまり、画面に表示される方法がコントロール自体で定義されていないことを意味します。代わりに、WPFはテンプレートを使用してUIオブジェクトを画面に描画する方法を決定し、これらのテンプレートを上書きすることができます。たとえば、Snoopのスクリーンショットでは、 'TreeViewItem'が' Expander'と 'Border'を含む' Grid'として描画され、 'Border'は' ContentPresenter'を含んでいます。これを上書きして、 'ContentPresenter'だけを描画します。 – Rachel