简体   繁体   English

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

[英]How to visible treeviewItem expander Arrow show for all child nodes in WPF?

I attached my problem screen shot. 我附上了我的问题屏幕截图。 So refer it, i need only expand arrow icon in tree view visible to all nodes in first time Load. 因此,请参考它,我只需要在树状视图中展开箭头图标,即可在首次加载时对所有节点可见。

我的问题图片

Problem is that tree view items don't have children means arrow not visible . 问题是树视图项目没有子意味着箭头不可见。 But Initial time load i need that arrow visible. 但初始时间负载我需要该箭头可见。 After user expand it will hide. 用户扩展后,它将隐藏。

Root have child nodes. 根有子节点。 But others not have. 但是其他人没有。 So Expand time only i can load. 因此,只有我可以加载扩展时间。

This behaviour places in ControlTemplate of TreeViewItem. 此行为放在TreeViewItem的ControlTemplate中。 And there is only one way to change it - change control template of your TreeViewItem. 仅有一种更改方法-更改TreeViewItem的控件模板。

I used default template and style of ToggleButton and TreeViewItem. 我使用了默认模板和ToggleButton和TreeViewItem的样式。

You shoud just comment one trigger in ControlTemplate of TreeViewItem: 您应该只在TreeViewItem的ControlTemplate中注释一个触发器:

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

This result view: Result view 结果视图: 结果视图

Below I paste all styles and tempaltes. 在下面粘贴所有样式和模板。

Style of ToggleButton: 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>

ControlTemplate of TreeViewItem: 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>

Style of TreeViewItem: TreeViewItem的样式:

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

Window: 窗口:

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

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

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