我正在尝试在WPF中创建一个可编辑的树视图节点。我看了this article。但他将最重要的部分排除在“家庭作业”之外,并以现在缺失的画面形式给出了暗示。它使整个博客文章对我无用。否则我认为非常好。
我有以下树视图模板,我遗漏了属性。
<HierarchicalDataTemplate>
<StackPanel>
<Image/>
<TextBlock/>
</StackPanel>
</HierarchicalDataTemplate>
创建新的DataTemplate
<DataTemplate x:Key="editableName">
<TextBox/>
</DataTemplate>
选择树视图中的节点时,使用以下触发器更改模板。
<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中的此触发器。
或者我是以错误的方式解决这个问题?
非常感谢您的帮助
答案 0 :(得分:12)
<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>
答案 1 :(得分:0)
应为ItemTemplate
。
这是修改TreeViewItem
正文的属性。要修改标题,请使用HeaderTemplate
。