简体   繁体   English

我对WPF treeviewitem有问题

[英]I have issue with WPF treeviewitem

Below treeview xaml file : 在treeview xaml文件下面:

<TreeView Name="templatetree"
          SelectedItemChanged="templatetree_SelectedItemChanged"
          MaxHeight="210" Background="{StaticResource MediumGrayBrush}"
          ScrollViewer.VerticalScrollBarVisibility="Auto"
          ScrollViewer.HorizontalScrollBarVisibility="Auto">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="True"/>
            <Setter Property="IsSelected" Value="False" />
        </Style>
    </TreeView.ItemContainerStyle>
    <TreeView.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
                         Color="#FF1E90FF"/>

        <HierarchicalDataTemplate DataType="{x:Type Tree:Templates}" ItemsSource="{Binding Members}">
            <StackPanel Orientation="Horizontal">
                <Image Source="../Images/template.png"
                       Height="22" Width="22" Margin="0,0,5,0"/>
                <TextBlock Text="{Binding Name}"
                           Style="{StaticResource PopupBodyTextStyle}"
                           FontFamily="{StaticResource Symbol}" MouseLeftButtonDown="HeaderNode_MouseLeftButtonDown"/>
                <TextBlock Text=" [" Foreground="{StaticResource HighlightBrush}"/>
                <TextBlock Text="{Binding Members.Count}" Foreground="{StaticResource HighlightBrush}"/>
                <TextBlock Text="]" Foreground="{StaticResource HighlightBrush}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type Tree:TemplateTypes}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}"
                           Style="{StaticResource PopupBodyTextStyle}"
                           FontFamily="{StaticResource Symbol}"
                           MouseLeftButtonDown="MemberNode_MouseLeftButtonDown"/>
            </StackPanel>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

Class file like below: 类文件如下:

public class Templates
{
    public string Name { get; set; } 

    public ObservableCollection<TemplateTypes> Members { get; set; } = new ObservableCollection<TemplateTypes>();
}

public class TemplateTypes
{
    public string Name { get; set; }

    public string Version { get; set; }
}

Output like : 输出像:

Template1
    --Template1.1    
    --Template1.2

Template2
    --Template2.1

I want set IsSelected property of TreeViewItem for child node(Template1.1) through programatically but it gives me only for parent node (Template1) 我想通过编程为子节点(Template1.1)设置TreeViewItem IsSelected属性,但它仅给父节点(Template1)提供信息

I tried to get item from treeview but it gives parent node only 我试图从treeview获取项目,但它仅提供父节点

{
.
.
.
.

templatetree.ItemsSource = nodeList;
}

TreeViewItem tr = (TreeViewItem)templatetree.ItemContainerGenerator.ContainerFromItem(templatetree.Items[0]);\\This lines gives me parent node of Template Type.

How can I set IsSelected property for child node? 如何为子节点设置IsSelected属性?

expected result : Child item selection 预期结果: 子项选择

To add style for second level you need to set it in HierarchicalDataTemplate like this 要为第二级添加样式,您需要像这样在HierarchicalDataTemplate中进行设置

<HierarchicalDataTemplate DataType="{x:Type Tree:Templates}" ItemsSource="{Binding Members}">
    <StackPanel Orientation="Horizontal">
        <Image Source="../Images/template.png"
                   Height="22" Width="22" Margin="0,0,5,0"/>
        <TextBlock Text="{Binding Name}"
                       Style="{StaticResource PopupBodyTextStyle}"
                       FontFamily="{StaticResource Symbol}" MouseLeftButtonDown="HeaderNode_MouseLeftButtonDown"/>
        <TextBlock Text=" [" Foreground="{StaticResource HighlightBrush}"/>
        <TextBlock Text="{Binding Members.Count}" Foreground="{StaticResource HighlightBrush}"/>
        <TextBlock Text="]" Foreground="{StaticResource HighlightBrush}"/>
    </StackPanel>
    <HierarchicalDataTemplate.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="False" />
        </Style>
    </HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>

Below is an example of style multi level TreeViewItem 以下是样式多级TreeViewItem的示例

    <DataTemplate x:Key="MenuItemTemplate" >
       <TreeViewItem/>
    </DataTemplate>
    <HierarchicalDataTemplate x:Key="ThirdLevel" ItemTemplate="{StaticResource MenuItemTemplate}">
       <TextBlock Text="Text" />
       <HierarchicalDataTemplate.ItemContainerStyle>
          <Style>
          <!--  3rd STYLE HERE  -->
          </Style>
       </HierarchicalDataTemplate.ItemContainerStyle>
     </HierarchicalDataTemplate>

     <HierarchicalDataTemplate x:Key="SecondLevel" ItemTemplate="{StaticResource ThirdLevel}">
        <TextBlock Text="Text" />
        <HierarchicalDataTemplate.ItemContainerStyle>
           <Style>
               <!--  2nd STYLE HERE  -->
           </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
      </HierarchicalDataTemplate>

     <TreeView ItemTemplate="{StaticResource SecondLevel}">
         <TreeView.ItemContainerStyle>
         <Style>
             <!--  1st Level Style  -->
          </Style>
         </TreeView.ItemContainerStyle>
     </TreeView>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM