使用模板和样式的可编辑树视图节点

Posted

技术标签:

【中文标题】使用模板和样式的可编辑树视图节点【英文标题】:Editable treeview node using templates and styles 【发布时间】:2012-03-23 17:56:21 【问题描述】:

我正在尝试在 WPF 中创建一个可编辑的树视图节点。我读了this article。但他遗漏了最关键的部分作为“作业”,并以现在缺失的图片的形式给出了暗示。它使他的整个博客文章对我毫无用处。否则我认为它非常好。

我有以下树视图模板,我省略了属性。

            <HierarchicalDataTemplate>
                <StackPanel>
                    <Image/>
                    <TextBlock/>
                </StackPanel>
            </HierarchicalDataTemplate>

创建一个新的数据模板

            <DataTemplate x:Key="editableName">
                <TextBox/>
            </DataTemplate>

使用以下触发器在选择TreeView中的节点时更改模板。

<Style TargetType="x:Type TreeViewItem">    
 <Style.Triggers>
   <Trigger Property="IsSelected" Value="True">
       <Setter Property="SOMEPATH!!!" Value="StaticResource editableName" />
   </Trigger>
 </Style.Triggers>
</Style>

我需要在 HierarchicalDataTemplate/StackPanel/TextBlock.HeaderTemplate 中插入数据模板的路径是什么?来自 TreeViewItem 中的此触发器。

或者我是不是走错了路?

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

应该是ItemTemplate

这是修改TreeViewItem 正文的属性。要修改标头,请使用HeaderTemplate

【讨论】:

【参考方案2】:
        <TreeView x:Name="MyTreeView">
            <TreeView.Resources>
                <DataTemplate x:Key="NormalTemplate">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Binding ID" Margin="3"/>
                        <TextBlock Text="-" Margin="3"/>
                        <TextBlock Text="Binding Name" Margin="3"/>
                    </StackPanel>
                </DataTemplate>
                <DataTemplate x:Key="EditTemplate">
                    <TextBox Text="Binding Name"/>
                </DataTemplate>
            </TreeView.Resources>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate
                             ItemsSource="Binding Team">
                    <ContentPresenter Content="Binding">
                        <ContentPresenter.Style>
                            <Style TargetType="x:Type ContentPresenter">
                                <Setter Property="ContentTemplate"
                                        Value="StaticResource
                                                NormalTemplate"/>
                                <Style.Triggers>
                                    <DataTrigger
                                         Binding="Binding IsSelected,
                                         RelativeSource=RelativeSource
                                              FindAncestor,
                                         AncestorType=x:Type TreeViewItem"
                                              Value="True">
                                        <Setter Property="ContentTemplate"
                                                Value="StaticResource
                                                        EditTemplate" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ContentPresenter.Style>
                    </ContentPresenter>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView> 

【讨论】:

谢谢,我设法用一种稍微不同的方式自己解决了这个问题,使用 DataTrigger 和 ContentControl。但我想我可能更喜欢你的:)

以上是关于使用模板和样式的可编辑树视图节点的主要内容,如果未能解决你的问题,请参考以下文章

drupal 6和视图节点表单

TextChange 上每个项目的可编辑列表视图项目和运行时计算。

如何在 Qt 中制作部分可编辑的树模型

自定义表格视图单元格中的可编辑文本字段

在一个表单中创建具有多个模型的可编辑模板

带有核心数据的可编辑表格视图