树视图隐藏 [+] [-] 按钮
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 中的浮动按钮?