Редактируемый древовидный узел с использованием шаблонов и стилей - PullRequest
3 голосов
/ 06 марта 2012

Я пытаюсь создать редактируемый древовидный узел в WPF. Я прочитал эту статью . Но он пропускает самую важную часть как «домашнее задание» и дает подсказку в виде недостающей картины. Это делает его весь пост в блоге бесполезным для меня. В противном случае это очень хорошо, я думаю.

У меня есть следующий шаблон дерева, я пропустил атрибуты.

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

Создание нового шаблона данных

            <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.

Или я поступаю неправильно?

Большое спасибо за любую помощь

Ответы [ 2 ]

12 голосов
/ 06 марта 2012
        <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> 
0 голосов
/ 06 марта 2012

Это должно быть ItemTemplate.

Это свойство для изменения тела TreeViewItem.Чтобы изменить заголовок, используйте HeaderTemplate.

...