Làm cách nào để ẩn tiêu đề của WPF ListView?


85

Tôi muốn có thể ẩn tiêu đề ở đầu mỗi cột lưới trong WPF ListView.

Đây là XAML cho ListView của tôi:

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

Dữ liệu tôi ràng buộc này là:

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

Câu trả lời:


139

Xác định một kiểu như vậy

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

Áp dụng nó như vậy

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

2
Đây không phải là FrameworkElement.Visibility, ít nhất là trong WPF 3.5? (Tôi biết đây là một chủ đề cũ, nhưng nó ở phía trên cùng trên Google, vì vậy nó rất hữu ích cho rất nhiều người)
Roy T.

1
Nó không cần phải được. Bạn đã chỉ định loại đích, vì vậy bạn không cần chỉ định vị trí của thuộc tính.
Ray

Bài đăng xuất sắc ... đã tiết kiệm cho tôi một đống thời gian và làm việc tốt .. cảm ơn
Kev

Nếu việc sử dụng lại không phải là một yếu tố, thì điều này cũng có thể được thực hiện nội tuyến trên GridView:<GridView><GridView.ColumnHeaderContainerStyle><Style TargetType="{x:Type GridViewColumnHeader}"><Setter Property="Visibility" Value="Collapsed" /></Style></GridView.ColumnHeaderContainerStyle></GridView>
HotN

55

Cảm ơn cho giải pháp này. Bạn cũng có thể đặt Stylenội tuyến như vậy:

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

(Ngoài ra, {x:Type}ký hiệu bạn đã sử dụng dường như không cần thiết)


Mặc dù cả hai câu trả lời đều đúng, nhưng điều này được ưu tiên hơn cả. cảm ơn bạn.
New Bee

20

Một cách khác bạn có thể áp dụng giải pháp của Ray là như sau:

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

Giải pháp đặt thuộc tính kiểu trực tiếp thay vì tạo tài nguyên được áp dụng tự động. Không nói nó tốt hơn, chỉ là một cách khác ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.