Wie kann ich den Header einer WPF ListView ausblenden?


85

Ich möchte in der Lage sein, den Header oben in jeder Rasterspalte in einer WPF-Listenansicht auszublenden.

Dies ist die XAML für meine 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>

Die Daten, an die ich dies binde, sind:

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

Antworten:


139

Definieren Sie einen Stil wie diesen

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

Wende es so an

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

2
Sollte dies nicht FrameworkElement.Visibility sein, zumindest in WPF 3.5? (Ich weiß, dass dies ein altes Thema ist, aber es steht bei Google ganz oben, daher ist es für viele Leute nützlich.)
Roy T.

1
Das muss nicht sein. Sie haben den Zieltyp angegeben, sodass Sie nicht angeben müssen, wo sich die Eigenschaft befindet.
Ray

Ausgezeichnete Post ... sparte mir eine Menge Zeit und arbeitete eine Belohnung .. danke
Kev

Wenn die Wiederverwendung kein Faktor ist, kann dies auch in der GridView inline erfolgen:<GridView><GridView.ColumnHeaderContainerStyle><Style TargetType="{x:Type GridViewColumnHeader}"><Setter Property="Visibility" Value="Collapsed" /></Style></GridView.ColumnHeaderContainerStyle></GridView>
HotN

55

Danke für diese Lösung. Sie können die StyleInline auch so setzen:

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

(Auch die von {x:Type}Ihnen verwendete Notation scheint nicht benötigt zu werden.)


Obwohl beide Antworten richtig sind, ist dies die am meisten bevorzugte. Vielen Dank.
New Bee

20

Eine andere Möglichkeit, Rays Lösung anzuwenden, ist folgende:

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

Die Lösung legt die Stileigenschaft direkt fest, anstatt eine Ressource zu erstellen, die automatisch angewendet wird. Nicht sagen, dass es besser ist, nur ein anderer Weg ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.