Treeview скрыть кнопки [+] [-] - PullRequest
1 голос
/ 29 июля 2010

Кто-нибудь знает, как скрыть кнопку [-] для дерева? Древовидная структура никогда не будет свернута, и поэтому мне не нужен корневой узел, чтобы иметь возможность свернуть. Я знаю, что мог бы использовать просмотр списка со стилем, который выравнивает элемент [0], чтобы действовать как корневой узел древовидной структуры. Однако связывание, которое я использую, и т. Д. Вроде запрашивает древовидное представление, и я не уверен, как получить доступ к кнопке и отключить ее.

Ответы [ 2 ]

5 голосов
/ 30 июля 2010

Это должно работать.Вам необходимо изменить ControlTemplate TreeViewItem, кнопка [+] / [-] на самом деле представляет собой ToggleButton внутри ControlTemplate TreeViewItem, поэтому все, что вам нужно сделать, это установить его видимость скрытым или свернутым.проект под названием «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>

0 голосов
/ 30 июля 2010

Я реализовал это недавно.В элементе управления TreeView я просто установил:

IsHitTestVisible="False"

и добавил в мой app.xaml:

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

Хотя это исключает возможность выбора любого элемента TreeViewItems.Я просто сделал это, потому что хотел простое иерархическое представление некоторых данных, которые у меня были.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...