首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF TreeView如何为TreeViewItem的子元素添加TreeViewItem控件模板

WPF TreeView如何为TreeViewItem的子元素添加TreeViewItem控件模板
EN

Stack Overflow用户
提问于 2013-03-29 13:57:56
回答 1查看 12.8K关注 0票数 1

如何创建像这样的treeview:

代码语言:javascript
复制
 <TreeViewItem Header="Customers" ItemsSource="{Binding Customers}">
  • 客户
    • 安娜
      • 删除
      • 打开

代码语言:javascript
复制
- Peter 
    - Delete
    - Open

代码语言:javascript
复制
- Andrew 
    - Delete
    - Open

我想创建子项目模板,如下所示

代码语言:javascript
复制
 <TreeViewItem Header="{Binding Header}">
   <TreeViewItem Header="Delete"/>
   <TreeViewItem Header="Open"/>
 </TreeViewItem>

但是它不太好用,因为我最终使用的是带有数据板treeviewitem的treeviewitem,但是我想重写子元素的控制模板,而不是父元素。当然,我希望避免我的绑定成为TreeViewItem,也不想创建带有静态服从"Open“、"Delete”的子级。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-02 09:47:08

这里是我读过的关于TreeView的最好的文章之一。

TreeView.Resources中,如果删除和打开命令是某些集合的项,则可以使用不同的DataType声明几个DataType。(命令的TargetType为ICommand)。

但我觉得你根本不需要TreeView。客户是列表的标题。如果您希望它是可执行的,请使用膨胀机控件。

然后,为每个客户提供一个数据模板就足够了。

代码语言:javascript
复制
<DataTemplate DataType="CustomerTypeName">
    <Expander Header="{Binding CustomerName}">
        <Button Command="{Binding DeleteCustomerCmd}" Content="Delete" Margin="15,0,0,0"/>
        <Button Command="{Binding OpenCustomerCmd}" Content="Open" Margin="15,0,0,0"/>
    <Expander/>
<DataTemplate>

但是在这里,你会遇到一些选择高亮的问题。

代码语言:javascript
复制
public class CommandWrapper
{
    ICommand Command {get;set;}
    string CommandName {get;set;}
}

public class CustomerViewModel
{
    Customer Customer {get;set;}
    IEnumerable<CommandWrapper> Commands {get;}
}

让客户成为CustomerViewModel的集合。然后,以下XAML可以提供帮助:

代码语言:javascript
复制
<TreeView ItemsSource="{Binding ...}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="TypeHoldingCustomersCollection" 
            ItemsSource="{Binding Customers}">
            <TextBlock Text="Customers"/>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="CustomerViewModel" 
            ItemsSource="{Binding Commands}">
            <TextBlock Text="{Binding Path=Customer.Name}"/>
        </HierarchicalDataTemplate>

        <DataTemplate DataType="CommandWrapper">
            <Button Content="{Binding CommandName}" Command="{Binding Command}"/>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15704761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档