从 ListView 的顶部隐藏 HeaderContent

Hide HeaderContent from the top of a ListView

我有一个

<DockPanel>
    <!-- Header -->
    <Button DockPanel.Dock="Top" Command="{Binding CreateAccountCommand}" Margin="{StaticResource ControlMargin}" Style="{StaticResource IconButtonStyle}">
        <StackPanel>
            <MahAppsIconPacks:PackIconFontAwesome Kind="Pencil" />
            <TextBlock>create account</TextBlock>
        </StackPanel>
    </Button>

    <!-- Accounts list -->
    <ListView SelectionMode="Single" SelectedIndex="0" ItemsSource="{Binding AccountViewModels}" SelectedItem="{Binding SelectedItem}" Style="{StaticResource AccountsList}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <LocalViews:AccountView Margin="{StaticResource ControlMargin}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ListView>
</DockPanel>

渲染时上面有一个黑色分隔符,非常难看。我该如何隐藏它?我试过设置不同的样式,但是没有ListViewColumnHeader.

在活动树中它显示为 header 内容...不是分隔符,我的错。我该如何删除它?

这行不通:

<Style TargetType="ListView" x:Key="AccountsList" BasedOn="{StaticResource {x:Type ListView}}">
        <Style.Resources>
            <Style TargetType="HeaderedContentControl">
                <Setter Property="Visibility" Value="Collapsed" />
            </Style>
        </Style.Resources>
    </Style>

您是否在使用 ListView 的任何视图功能? (例如 GridView 等,我认为这是默认设置。在这种情况下,分隔符可能是 header 部分,但为空)。如果不是,请尝试使用 ListBox 代替。默认情况下没有 header。

编辑:我刚刚检查了这个理论,但看来我根本无法重现您的问题。这是一个 ListBox,因为你已经有了代码(还有一个 ListView 很好):

<Window.Resources>
    <x:Array x:Key="Items" Type="sys:String">
        <sys:String>Item 1</sys:String>
        <sys:String>Item 2</sys:String>
        <sys:String>Item 3</sys:String>
    </x:Array>
</Window.Resources>
<StackPanel Margin="20">
    <TextBlock Text="ListBox:"/>
    <ListBox Height="100" ItemsSource="{StaticResource Items}" BorderBrush="Transparent">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ListBox>
    <TextBlock Text="ListView:"/>
    <ListView Height="100" ItemsSource="{StaticResource Items}" BorderBrush="Transparent">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ListView>
</StackPanel>

可能是 Windows 7 上的不同主题,但是,我使用的是 Windows 10。

我相信这是 MahApps 模板的结果。这不是标准 WPF ListView 的默认行为。

您必须调整 MahApps 模板才能删除它。 像这样:

<Style TargetType="{x:Type ListView}" BasedOn="{StaticResource {x:Type ListView}}">
    <Setter Property="BorderThickness" Value="0" />
</Style>

MahApps 的代码和资源都是开源的。我认为您遇到的特定问题是由 BorderThickness setter 驱动的:

https://github.com/MahApps/MahApps.Metro/blob/develop/src/MahApps.Metro/MahApps.Metro/Styles/Controls.ListView.xaml

 <Style x:Key="MetroListView" TargetType="{x:Type ListView}">
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="AlternationCount" Value="2" />
    <Setter Property="Background" Value="{DynamicResource WhiteBrush}" />
    <Setter Property="BorderBrush" Value="{DynamicResource BlackBrush}" />
    <Setter Property="BorderThickness" Value="0 1 0 0" />