ฉันจะซ่อนส่วนหัวของ WPF ListView ได้อย่างไร


86

ฉันต้องการซ่อนส่วนหัวที่ด้านบนของแต่ละคอลัมน์กริดใน WPF ListView

นี่คือ XAML สำหรับ 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>

ข้อมูลที่ฉันผูกไว้คือ:

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

คำตอบ:


140

กำหนดรูปแบบเช่นนั้น

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

ทาแบบนั้นเลย

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

2
ไม่ควรเป็น FrameworkElement.Visibility อย่างน้อยใน WPF 3.5? (ฉันรู้ว่านี่เป็นหัวข้อเก่า แต่อยู่ในอันดับต้น ๆ ของ Google ดังนั้นจึงมีประโยชน์สำหรับคนจำนวนมาก)
Roy T.

1
ไม่จำเป็นต้องเป็น คุณได้ระบุประเภทเป้าหมายดังนั้นคุณไม่จำเป็นต้องระบุว่าคุณสมบัติอยู่ที่ไหน
Ray

โพสต์ที่ยอดเยี่ยม ... ช่วยให้ฉันประหยัดเวลาและทำงานได้ดี .. ขอบคุณ
Kev

หากการใช้ซ้ำไม่ใช่ปัจจัยก็สามารถทำได้แบบอินไลน์บน GridView เช่นกัน:<GridView><GridView.ColumnHeaderContainerStyle><Style TargetType="{x:Type GridViewColumnHeader}"><Setter Property="Visibility" Value="Collapsed" /></Style></GridView.ColumnHeaderContainerStyle></GridView>
HotN

55

ขอบคุณสำหรับการแก้ปัญหานี้ คุณยังสามารถใส่Styleอินไลน์ได้ดังนี้:

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

(นอกจากนี้{x:Type}สัญกรณ์ที่คุณใช้ดูเหมือนจะไม่จำเป็น)


แม้ว่าคำตอบทั้งสองจะถูกต้อง แต่ก็เป็นที่ต้องการมากที่สุด ขอขอบคุณ.
New Bee

20

อีกวิธีหนึ่งที่คุณสามารถใช้วิธีแก้ปัญหาของ Ray มีดังนี้:

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

โซลูชันจะตั้งค่าคุณสมบัติสไตล์โดยตรงแทนที่จะสร้างทรัพยากรที่ใช้โดยอัตโนมัติ ไม่ได้บอกว่าดีกว่า แต่เป็นวิธีอื่น ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.