如何在 WPF 中为所有子节点显示可见的 treeviewItem 扩展器箭头?

用户8221107

我附上了我的问题屏幕截图。所以参考它,我只需要在第一次加载时扩展所有节点可见的树视图中的箭头图标。

我的问题图片

问题是树视图项没有子项意味着箭头不可见。但是初始时间负载我需要那个箭头可见。用户展开后,它将隐藏。

根有子节点。但其他人没有。所以扩展时间只有我可以加载。

4lex Kislitsyn

此行为位于 TreeViewItem 的 ControlTemplate 中。只有一种方法可以更改它 - 更改 TreeViewItem 的控件模板。

我使用了 ToggleButton 和 TreeViewItem 的默认模板和样式。

你应该只在 TreeViewItem 的 ControlTemplate 中评论一个触发器:

<Trigger Property="HasItems" Value="False">
    <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
</Trigger>

此结果视图:结果视图

下面我粘贴所有样式和模板。

ToggleButton 的样式:

<Style TargetType="{x:Type ToggleButton}" x:Key="TreeViewItemToggleButtonStyle">
        <Setter Property="Focusable" Value="False"/>
        <Setter Property="Width" Value="16"/>
        <Setter Property="Height" Value="16"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Border Background="Transparent" Height="16" Padding="5" Width="16">
                        <Path x:Name="ExpandPath" Data="M0,0 L0,6 L6,0 z" Fill="White" Stroke="#FF818181">
                            <Path.RenderTransform>
                                <RotateTransform Angle="135" CenterY="3" CenterX="3"/>
                            </Path.RenderTransform>
                        </Path>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="RenderTransform" TargetName="ExpandPath">
                                <Setter.Value>
                                    <RotateTransform Angle="180" CenterY="3" CenterX="3"/>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Fill" TargetName="ExpandPath" Value="#FF595959"/>
                            <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF262626"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF27C7F7"/>
                            <Setter Property="Fill" TargetName="ExpandPath" Value="#FFCCEEFB"/>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsMouseOver" Value="True"/>
                                <Condition Property="IsChecked" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF1CC4F7"/>
                            <Setter Property="Fill" TargetName="ExpandPath" Value="#FF82DFFB"/>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

TreeViewItem 的 ControlTemplate:

<ControlTemplate TargetType="{x:Type TreeViewItem}" x:Key="ItemTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="19" Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <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="{DynamicResource TreeViewItemToggleButtonStyle}"/>
            <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
                <ContentPresenter x:Name="PART_Header" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
            </Border>
            <ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="IsExpanded" Value="False">
                <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
            </Trigger>
            <!-- Commented trigger -->
            <!--<Trigger Property="HasItems" Value="False">
                <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
            </Trigger>-->
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" TargetName="Bd" 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 Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/>
            </MultiTrigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

TreeViewItem 的样式:

<Style TargetType="TreeViewItem">
    <EventSetter Event="Expanded" Handler="TreeViewItem_Expanded"/>
    <Setter Property="Template" Value="{DynamicResource ItemTemplate}"/>
</Style>

窗户:

<Grid>
    <TreeView>
        <TreeViewItem Header="Root" IsExpanded="True">
            <TreeViewItem Header="Inner 1"/>
            <TreeViewItem Header="Inner 2"/>
        </TreeViewItem>
    </TreeView>
</Grid>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从 WPF 中的 TreeView 获取 TreeViewItem

如何在 TreeView,wpf 中添加组合框作为 TreeViewItem?

如何禁用 WPF 扩展器控件 isPressed/onMouseClick 事件?

在WPF中将TreeViewItem显示为网格行

带有扩展器的WPF分组组合框

WPF-Stackpanel中有多个扩展器的问题

在WPF中,根据组合框输入创建扩展器

如何在TreeviewItem中获取子控件?

如何在WPF中将多个内容动态添加到扩展器

如何在WPF中选择组合框时禁用扩展器?

单击WPF不会突出显示TreeViewItem

双击访问 C# 中的 WPF TreeViewItem

如何在窗口中以编程方式扩展所有扩展器

WPF,TreeViewItem,如何不根据依赖项属性显示contextMenu?

如何在 TreeView 用户控件中定义 TreeViewItem 触发器

WPF DataGrid扩展器中的分组行在右侧添加了额外的列,当所有扩展器都关闭时消失

当所有子级都折叠或隐藏时,如何在分层数据模板中隐藏扩展器?

WPF扩展器未扩展

如何以编程方式增加wpf扩展器内容的宽度?

WPF-如何将扩展器图标放在其标题的中心?

如何在没有固定高度的扩展器中启用滚动

在WPF中的整个TreeViewItem行上显示ContextMenu

WPF TreeViewItem无法选择

WPF:单个TreeViewItem粗体

wpf treeviewitem鼠标双击

WPF - 在页面上将 HorizontalAlignment 设置为 Left 时拉伸扩展器

WPF-根据显示的内容,使两个扩展器填充可用空间

WPF中带有TextBox的TreeViewItem:键入特殊字符

WPF C#:如何从HierarchicalDataTemplate获取treeviewitem标头