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

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

【问题讨论】:

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

标签: c# wpf button treeview


【解决方案1】:

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

创建一个名为“StackOverflowTests”的项目(因此您无需更改任何内容)并将此代码粘贴到您的 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 的能力。 我这样做是因为我想要我拥有的一些数据的简单分层表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      相关资源
      最近更新 更多