¿Cómo puedo ocultar el encabezado de un ListView de WPF?

85

Quiero poder ocultar el encabezado en la parte superior de cada columna de la cuadrícula en un ListView de WPF.

Este es el XAML para mi ListView:

   <Window x:Class="ListViewTest.Test0.ListViewTest"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Empty ListView Grid" Height="216" Width="435" FlowDirection="LeftToRight" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.IsSharedSizeScope="False">
    <Window.Resources>
        <XmlDataProvider x:Key="CustomersDS" Source="C:\data.xml"/>
    </Window.Resources>


    <ListView Margin="0,0,0,50" ItemTemplate="{DynamicResource CustomerTemplate}" ItemsSource="{Binding Source={StaticResource CustomersDS}, XPath=/Customers/Customer}">
        <ListView.View>
            <GridView>
                <GridViewColumn  DisplayMemberBinding="{Binding XPath=Code}"/>
                <GridViewColumn  DisplayMemberBinding="{Binding XPath=Name}"/>
                <GridViewColumn  DisplayMemberBinding="{Binding XPath=Country}"/>
            </GridView>
        </ListView.View>
    </ListView>


</Window>

Los datos a los que estoy vinculando esto son:

 <Customers>
  <Customer>
 <Code>1234</Code>
 <Name>EPI</Name>
 <Country>Sesame Street</Country>
  </Customer>
  <Customer>
 <Code>3234</Code>
 <Name>Paul</Name>
 <Country>United Kingdom</Country>
  </Customer>
 <Customer>
 <Code>3344</Code>
 <Name>Juan</Name>
 <Country>Spain</Country>
  </Customer>
 <Customer>
 <Code>4321</Code>
 <Name>Dodo</Name>
 <Country>Mars</Country>
  </Customer>
</Customers>
Ozplc
fuente

Respuestas:

139

Define un estilo así

<Window.Resources>
    ....
    <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Visibility" Value="Collapsed" />
    </Style>
</Window.Resources>

Aplicarlo así

<GridView ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}">
    ....
</GridView>
Rayo
fuente
2
¿No debería ser FrameworkElement.Visibility, al menos en WPF 3.5? (Sé que este es un tema antiguo, pero está en la parte superior de Google, por lo que es útil para mucha gente)
Roy T.
1
No tiene por qué serlo. Ha especificado el tipo de destino, por lo que no necesita especificar dónde está la propiedad.
Ray
Excelente publicación ... me ahorró un montón de tiempo y funcionó de maravilla ... gracias
Kev
Si la reutilización no es un factor, esto también se puede hacer en línea en GridView:<GridView><GridView.ColumnHeaderContainerStyle><Style TargetType="{x:Type GridViewColumnHeader}"><Setter Property="Visibility" Value="Collapsed" /></Style></GridView.ColumnHeaderContainerStyle></GridView>
HotN
55

Gracias por esta solucion. También puede poner el en Stylelínea así:

<ListView>
    <ListView.Resources>
        <Style TargetType="GridViewColumnHeader">
            <Setter Property="Visibility" Value="Collapsed" />
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <!-- ... -->
        </GridView>
    </ListView.View>
</ListView>

(Además, la {x:Type}notación que usó no parece ser necesaria)

Glenn Slayden
fuente
Aunque ambas respuestas son correctas, esta es la más preferida. gracias.
New Bee
20

Otra forma en que puede aplicar la solución de Ray es así:

<ListView>
    <ListView.View>
        <GridView>
            <GridView.ColumnHeaderContainerStyle>
                <Style TargetType="GridViewColumnHeader">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Style>
            </GridView.ColumnHeaderContainerStyle>
        </GridView>
    </ListView.View>
</ListView>

La solución establece la propiedad de estilo directamente en lugar de crear un recurso que se aplica automáticamente. No digo que sea mejor, solo de otra manera ...

Darren
fuente