WPF TreeView中的ContentControl

时间:2011-12-19 14:16:25

标签: wpf

我正在尝试在树视图中添加内容控件,但是当我在内容控件中添加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。如何将TreeViewItems对齐在一起?

2 个答案:

答案 0 :(得分:2)

我会从Rachel的回答开始,但删除ContentControl。您可以使用两个DataTemplates和一个分配给TreeViewItem的ItemTemplateSelector属性的ItemTemplateSelector来完成此操作。

将复杂和简单的类型定义为两个DataTemplates。然后编写一个继承自DataTemplateSelector的类,该类确定是否应在TreeViewItem中使用复杂类型或简单类型。然后,将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

答案 1 :(得分:0)

它确实将ContentControl嵌套在TreeViewItem中(参见下面的Snoop屏幕截图)

Snoop还告诉我额外的边距是+/- Expander,所以如果你想保持你的TreeViewItems嵌套,你可能不得不覆盖模板来摆脱这个边缘。

enter image description here

当然,如果你只是想在TreeViewItem中放置一个ContentControl,那么标签应该是相反的。

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