2009-03-10 8 views
62

Desidero poter nascondere l'intestazione nella parte superiore di ogni colonna della griglia in un ListView WPF.Come posso nascondere l'intestazione di un listview WPF?

Questo è il codice XAML per il mio 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> 

I dati che sto legando questo è:

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

risposta

113

definire uno stile in questo modo

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

applicarlo come so

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

Non dovrebbe essere FrameworkElement.Visibility, almeno in WPF 3.5? (So ​​che questo è un vecchio argomento, ma è in cima a Google, quindi è utile per molte persone) –

+1

Non è necessario esserlo. Hai specificato il tipo di target, quindi non è necessario specificare dove si trova la proprietà. – Ray

+0

Post eccellente ... mi ha risparmiato un sacco di tempo e ha funzionato a meraviglia .. grazie – Kev

39

Grazie per questa soluzione. Si può anche mettere il Style in linea in questo modo:

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

(Inoltre, la notazione {x:Type} hai usato non sembra essere necessario)

+0

Anche se entrambe le risposte sono corrette, questa è la più preferita. grazie. –

9

Un altro modo è possibile applicare la soluzione di Ray è come questo:

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

La soluzione imposta direttamente la proprietà di stile anziché creare una risorsa che viene applicata automaticamente. Non dicendo che è meglio, solo un altro modo ...