【问题标题】: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 中的此触发器。

或者我是不是走错了路?

非常感谢您的帮助

【问题讨论】:

    标签: wpf templates treeview styles


    【解决方案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。但我想我可能更喜欢你的:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多