WPF中TreeView单击展开其子元素以及点击一个元素展开其他元素收起

TreeView单击展开其子元素:

 

在WPF的TreeView控件中,要想展开它的子元素,我们必须要鼠标左键点两下或者右键点一下,那么我们怎样实现左键点一下就使它展开呢?

Xaml:

<Grid>
        <TreeView HorizontalAlignment="Left" Height="208" Margin="243,35,0,0" VerticalAlignment="Top" Width="150">
            <TreeViewItem Header="AAA" Selected="TreeViewItem_Selected">
                <TreeViewItem Header="aaa"/>
                <TreeViewItem Header="bbb"/>
                <TreeViewItem Header="ccc"/>
            </TreeViewItem>
            <TreeViewItem Header="BBB" Selected="TreeViewItem_Selected_1">
                <TreeViewItem Header="aaa"/>
                <TreeViewItem Header="bbb"/>
                <TreeViewItem Header="ccc"/>
            </TreeViewItem>
        </TreeView>
</Grid>

在后台中的TreeViewItem的Selected函数中添加:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
        {
            TreeViewItem treeViewItem = e.OriginalSource as TreeViewItem;
            if (treeViewItem == null || e.Handled) return;
            treeViewItem.IsExpanded = !treeViewItem.IsExpanded;
            treeViewItem.IsSelected = false;
            e.Handled = true;
        }

        private void TreeViewItem_Selected_1(object sender, RoutedEventArgs e)
        {
            TreeViewItem treeViewItem = e.OriginalSource as TreeViewItem;
            if (treeViewItem == null || e.Handled) return;
            treeViewItem.IsExpanded = !treeViewItem.IsExpanded;
            treeViewItem.IsSelected = false;
            e.Handled = true;
        }
    }

这样就可以实现,左键单击一下TreeViewItem使它子元素直接展开。

如图:

 

点击一个元素展开其他元素收起:


Xaml中:

<Grid>
        <TreeView x:Name="Tree_View" SelectedItemChanged="Tree_View_SelectedItemChanged" HorizontalAlignment="Left" Height="208" Margin="243,35,0,0" VerticalAlignment="Top" Width="150">
            <TreeViewItem Header="AAA" Selected="TreeViewItem_Selected">
                <TreeViewItem Header="aaa"/>
                <TreeViewItem Header="bbb"/>
                <TreeViewItem Header="ccc"/>
            </TreeViewItem>
            <TreeViewItem Header="BBB" Selected="TreeViewItem_Selected_1">
                <TreeViewItem Header="aaa"/>
                <TreeViewItem Header="bbb"/>
                <TreeViewItem Header="ccc"/>
            </TreeViewItem>
        </TreeView>
 </Grid>

就是给TreeView添加了一个SelectedItemChanged属性,当里面的元素状态改变时,执行这个方法。

后台添加的代码:

private void Tree_View_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            TreeViewItem selected_item = Tree_View.SelectedItem as TreeViewItem;
            TreeViewItem item;
            if (selected_item != null)
            {
                for (int i = 0; i < Tree_View.Items.Count; i++)
                {
                    item = Tree_View.Items[i] as TreeViewItem;
                    if (item != selected_item)
                    {
                        item.IsExpanded = false;
                    }
                }
            }
        }

注意:我这里的TreeView的Name叫作Tree_View.


这样,就实现了点击一个元素展开其他元素收起的效果。

如图:

 

转载于:https://www.cnblogs.com/Leozi/p/10799414.html

以下是一个基本的WPF TreeView控件示例,它可以展开和折叠节点,同时具有自定义样式: ```xml <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="TreeView Example" Height="450" Width="800"> <Window.Resources> <!--定义树形节点模板--> <HierarchicalDataTemplate x:Key="NodeTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <Image Source="/Images/folder.png" Width="16" Height="16" Margin="0,0,5,0"/> <TextBlock Text="{Binding Name}"/> </StackPanel> </HierarchicalDataTemplate> <!--定义树形节点样式--> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TreeViewItem}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" MinWidth="19"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <!--树形节点图标--> <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}" /> <Border x:Name="Bd" Grid.Column="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" /> </Border> <!--树形节点内容--> <ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Grid.Column="1" Visibility="Collapsed"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsExpanded" Value="false"> <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/> </Trigger> <Trigger Property="HasItems" Value="false"> <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HasHeader" Value="false"/> <Condition Property="Width" Value="Auto"/> </MultiTrigger.Conditions> <Setter TargetName="PART_Header" Property="MinWidth" Value="75"/> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="HasHeader" Value="false"/> <Condition Property="Height" Value="Auto"/> </MultiTrigger.Conditions> <Setter TargetName="PART_Header" Property="MinHeight" Value="19"/> </MultiTrigger> <Trigger Property="IsSelected" Value="true"> <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsSelected" Value="true"/> <Condition Property="IsSelectionActive" Value="false"/> </MultiTrigger.Conditions> <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <!--定义树形节点数据源--> <TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource NodeTemplate}"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> </Style> </TreeView.ItemContainerStyle> </TreeView> </Window> ``` 这个示例使用了一个递归的数据结构来表示树形结构,每个节点都有一个名字和一个子节点列表。TreeView控件使用NodeTemplate作为节点的模板,其包括一个图标和节点名称。TreeViewItem样式定义了树形节点的外观和交互行为,包括展开/折叠按钮、节点内容和子节点容器。您可以根据需要对样式进行自定义,以实现更好的外观和交互效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值