如何从 WPF 树视图中删除边框

Posted

技术标签:

【中文标题】如何从 WPF 树视图中删除边框【英文标题】:how to delete the border from a WPF treeview 【发布时间】:2017-03-07 04:30:51 【问题描述】:

我想表明,当我选择 treeViewItem 时,treeViewItem 会改变背景。我删除了 TreeView 边框。但离开了 TreeView 背景。如何去除红色圈出的图片中的空间蓝色?

我的 XAML 代码是:

<UserControl.Resources>
    <Style x:Key="LibraryTreeViewItemStyle"
           TargetType="x:Type TreeViewItem">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="true">
                <Setter Property="Foreground" Value="Black" />
            </Trigger>
            <Trigger Property="IsSelected" Value="false">
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
        <Style.Resources>
            <SolidColorBrush x:Key="x:Static SystemColors.HighlightBrushKey" Color="White" />
            <SolidColorBrush x:Key="x:Static SystemColors.ControlBrushKey" Color="Green" />
        </Style.Resources>
    </Style>
</UserControl.Resources>

<TreeView x:Name="tv" HorizontalAlignment="Left" Height="195" VerticalAlignment="Top" Width="187"  Background="#FF213757"  ItemContainerStyle="StaticResource LibraryTreeViewItemStyle" BorderBrush="#FF1B1919" >

【问题讨论】:

【参考方案1】:

我刚刚在 XAML 中的 &lt;TreeView *STUFF* &gt;&lt;/TreeView&gt; 调用中使用了 BorderThickness="0"

(我的 Xaml 代码作为参考)

    <TreeView x:Name="tvReports" BorderThickness="0" Grid.Row="0" ScrollViewer.VerticalScrollBarVisibility="Auto" Visibility="Hidden"  Background="AliceBlue"></TreeView>

【讨论】:

【参考方案2】:

这解决了我的问题 Scrollviewer inside treeview 有一个边框厚度

<Style TargetType="TreeView">
                        <Style.Setters>
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="TreeView">
                                        <Border Name="Border" Background="Transparent" BorderThickness="0"
                                                >
                                            <ScrollViewer Background="Transparent" Focusable="False"
                                                          CanContentScroll="False"
                                                          BorderThickness="0">
                                                <ItemsPresenter />
                                            </ScrollViewer>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style.Setters>
                    </Style>

【讨论】:

【参考方案3】:

将 TreeView Padding 更改为 0(默认值为 1):

<TreeView Padding="0" ...

【讨论】:

我试过 Padding = "0" BorderThickness="0"。但结果相同。 @gyungjune,很高兴听到这个消息。如果 Padding 不是解决方案,请将您自己的解决方案作为另一个答案发布 @nikotromus 尝试设置 BorderThickness=0【参考方案4】:

由于边框属于 ScrollViewer,所以只需将其重叠设置Margin="-1"

【讨论】:

以上是关于如何从 WPF 树视图中删除边框的主要内容,如果未能解决你的问题,请参考以下文章

整行的WPF树视图项目背景

如何删除WPF ScrollViewer边框

如何在wpf应用程序中使gridview成为树视图的子元素

从 wpf 中的文件路径列表填充树视图

如何在 wpf 的分层数据模板中显示树视图项的上下文菜单

如何在WPF中的listview中的Columnheader和Data行之间删除分隔符边框行