树视图隐藏 [+] [-] 按钮

Posted

技术标签:

【中文标题】树视图隐藏 [+] [-] 按钮【英文标题】:Treeview hide [+] [-] buttons 【发布时间】:2011-03-22 15:12:27 【问题描述】:

有谁知道如何隐藏树视图的 [-] 按钮?树视图永远不会被折叠,因此我不需要根节点有折叠选项。我知道我可以使用带有 stye 的列表视图,它缩进 [0] 元素以充当树视图根节点。但是,我使用的绑定等需要树视图,我不确定如何访问该按钮并禁用它。

【问题讨论】:

@urema - 您希望使用哪种编码语言获得答案 - C#、VB、VC++ 等? 查看 C# ***.com/questions/161378/treeview-sign 虽然我没有给你答案,但我确实有一些关于 SO 的建议:第一,我假设你正在谈论 C#,因为你还有其他问题。目前,这个问题没有语言标签。第二,你问了 13 个问题,但没有接受任何答案。您应该接受问题的答案,以帮助 SO 继续前进。 我猜测 C# 和 WPF 从查看 OP 问题历史。我已经相应地修复了标签。 您至少应该添加标签,让人们知道您正在使用哪种语言或工具包。我也可以问“‘chair’的翻译是什么?” 【参考方案1】:

这应该可行。您需要修改 TreeViewItem 的 ControlTemplate,[+] / [-] 按钮实际上是 TreeViewItem 的 ControlTemplate 中的一个 ToggleButton,因此您只需将其可见性设置为隐藏或折叠即可。

创建一个名为“***Tests”的项目(因此您无需更改任何内容)并将此代码粘贴到您的 Window1.xaml 文件中。应该开箱即用:

    <ControlTemplate x:Key="invisibleButtonTreeViewItemTemplate" TargetType="TreeViewItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" MinWidth="19" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition />
            </Grid.RowDefinitions>
            <!-- Make the ToggleButton invisible -->
            <ToggleButton IsChecked="False" Visibility="Hidden" ClickMode="Press" Name="Expander" />
            <Border BorderThickness="TemplateBinding Border.BorderThickness" Padding="TemplateBinding Control.Padding" BorderBrush="TemplateBinding Border.BorderBrush" Background="TemplateBinding Panel.Background" Name="Bd" SnapsToDevicePixels="True" Grid.Column="1">
                <ContentPresenter Content="TemplateBinding HeaderedContentControl.Header" ContentTemplate="TemplateBinding HeaderedContentControl.HeaderTemplate" ContentStringFormat="TemplateBinding HeaderedItemsControl.HeaderStringFormat" ContentSource="Header" Name="PART_Header" HorizontalAlignment="TemplateBinding Control.HorizontalContentAlignment" SnapsToDevicePixels="TemplateBinding UIElement.SnapsToDevicePixels" />
            </Border>
            <ItemsPresenter Name="ItemsHost" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" />
        </Grid>
        <ControlTemplate.Triggers>
            <!-- Remove this trigger so it does not collapse on double click or-->
            <!--<Trigger Property="TreeViewItem.IsExpanded">
                <Setter Property="UIElement.Visibility" TargetName="ItemsHost">
                    <Setter.Value>
                        <x:Static Member="Visibility.Collapsed" />
                    </Setter.Value>
                </Setter>
                <Trigger.Value>
                    <s:Boolean>False</s:Boolean>
                </Trigger.Value>
            </Trigger>-->
            <Trigger Property="ItemsControl.HasItems">
                <Setter Property="UIElement.Visibility" TargetName="Expander">
                    <Setter.Value>
                        <x:Static Member="Visibility.Hidden" />
                    </Setter.Value>
                </Setter>
                <Trigger.Value>
                    <s:Boolean>False</s:Boolean>
                </Trigger.Value>
            </Trigger>
            <Trigger Property="TreeViewItem.IsSelected">
                <Setter Property="Panel.Background" TargetName="Bd">
                    <Setter.Value>
                        <DynamicResource ResourceKey="x:Static SystemColors.HighlightBrushKey" />
                    </Setter.Value>
                </Setter>
                <Setter Property="TextElement.Foreground">
                    <Setter.Value>
                        <DynamicResource ResourceKey="x:Static SystemColors.HighlightTextBrushKey" />
                    </Setter.Value>
                </Setter>
                <Trigger.Value>
                    <s:Boolean>True</s:Boolean>
                </Trigger.Value>
            </Trigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="TreeViewItem.IsSelected">
                        <Condition.Value>
                            <s:Boolean>True</s:Boolean>
                        </Condition.Value>
                    </Condition>
                    <Condition Property="Selector.IsSelectionActive">
                        <Condition.Value>
                            <s:Boolean>False</s:Boolean>
                        </Condition.Value>
                    </Condition>
                </MultiTrigger.Conditions>
                <Setter Property="Panel.Background" TargetName="Bd">
                    <Setter.Value>
                        <DynamicResource ResourceKey="x:Static SystemColors.ControlBrushKey" />
                    </Setter.Value>
                </Setter>
                <Setter Property="TextElement.Foreground">
                    <Setter.Value>
                        <DynamicResource ResourceKey="x:Static SystemColors.ControlTextBrushKey" />
                    </Setter.Value>
                </Setter>
            </MultiTrigger>
            <Trigger Property="UIElement.IsEnabled">
                <Setter Property="TextElement.Foreground">
                    <Setter.Value>
                        <DynamicResource ResourceKey="x:Static SystemColors.GrayTextBrushKey" />
                    </Setter.Value>
                </Setter>
                <Trigger.Value>
                    <s:Boolean>False</s:Boolean>
                </Trigger.Value>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <Style TargetType="x:Type TreeViewItem">

        <Setter Property="Template" Value="StaticResource invisibleButtonTreeViewItemTemplate" />
    </Style>

</Window.Resources>
<TreeView>
    <TreeViewItem Header="Item 1" IsExpanded="True">
        <TreeViewItem Header="Item 1.1" IsExpanded="True" />
        <TreeViewItem Header="Item 1.2" IsExpanded="True">
            <TreeViewItem Header="Item 1.2.1" IsExpanded="True" />
        </TreeViewItem>
    </TreeViewItem>
    <TreeViewItem Header="Item 2" IsExpanded="True">
        <TreeViewItem Header="Item 2.1" IsExpanded="True" />
    </TreeViewItem>
</TreeView>

【讨论】:

【参考方案2】:

我最近实现了这个。在我刚刚设置的 TreeView 控件上:

IsHitTestVisible="False"

并添加到我的 app.xaml 中:

<Style TargetType="TreeViewItem">
    <Setter Property="IsExpanded" Value="True" />
</Style>

虽然这消除了选择任何 TreeViewItems 的能力。 我这样做是因为我想要我拥有的一些数据的简单分层表示。

【讨论】:

以上是关于树视图隐藏 [+] [-] 按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动视图中隐藏和取消隐藏 UiViews 中的浮动按钮?

为啥拍照后图像按钮隐藏在表面视图后面? [关闭]

选择按钮时隐藏视图和其他对象

如何从子视图中隐藏信息按钮?

UINavigationController:在一个视图上隐藏后退按钮为所有视图隐藏它

按下按钮时隐藏 iAd 视图