我正试图在WPF中创建一个可编辑的树视图节点。我读过这篇文章。但他省略了最关键的部分作为"家庭作业",并以现在缺失的图片的形式给出了提示。这让他的整个博客文章对我来说毫无用处。否则我觉得这很好。
我有下面的树视图模板,我省略了属性。
<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中的此触发器。
还是我走错了路?
非常感谢您的帮助
<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>
它应该是ItemTemplate
。
这是修改TreeViewItem
主体的属性。要修改标头,请使用HeaderTemplate
。