2009-03-10 6 views
62

Je souhaite pouvoir masquer l'en-tête en haut de chaque colonne d'une liste de contrôle WPF.Comment puis-je cacher l'en-tête d'un WPF listview?

C'est le XAML pour mon 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> 

Les données que je suis lient cela est:

<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> 

Répondre

113

Définir un style comme si

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

Appliquer comme si

<GridView ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}"> 
    .... 
</GridView> 
+2

Si pas être FrameworkElement.Visibility, au moins dans WPF 3.5? (Je sais que c'est un vieux sujet, mais il est au sommet sur Google, donc c'est utile pour beaucoup de gens) –

+1

Il n'a pas besoin d'être. Vous avez spécifié le type de cible, vous n'avez donc pas besoin de spécifier l'emplacement de la propriété. – Ray

+0

poste excellent ... m'a sauvé un tas de temps et travaillé un régal .. merci – Kev

39

Merci pour cette solution. Vous pouvez aussi mettre la Style en ligne comme ceci:

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

(De plus, le ne semble pas être nécessaire notation que vous avez utilisé {x:Type})

+0

Bien que les deux réponses sont correctes, c'est le plus préféré. Je vous remercie. –

9

Une autre façon vous pouvez appliquer la solution de Ray est comme ceci:

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

la solution définit la propriété de style directement plutôt que de créer une ressource qui est automatiquement appliquée. Ne dis pas qu'il vaut mieux, juste une autre façon ...