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

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>
Strahl
quelle
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.)

Glenn Slayden
quelle
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 ...

Darren
quelle