【问题标题】:How can I hide the header of a WPF ListView?如何隐藏 WPF ListView 的标题?
【发布时间】:2010-10-12 13:30:55
【问题描述】:

我希望能够隐藏 WPF ListView 中每个网格列顶部的标题。

这是我的 ListView 的 XAML:

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

【问题讨论】:

    标签: .net wpf gridview listview wpf-controls


    【解决方案1】:

    这样定义样式

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

    像这样应用它

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

    【讨论】:

    • 这不应该是 FrameworkElement.Visibility,至少在 WPF 3.5 中是这样吗? (我知道这是一个老话题,但它在 Google 上排名靠前,所以它对很多人都很有用)
    • 不需要。你已经指定了目标类型,所以你不需要指定属性在哪里。
    • 优秀的帖子...为我节省了很多时间,并为我工作了......谢谢
    • 如果重用不是一个因素,这也可以在 GridView 上内联完成:&lt;GridView&gt;&lt;GridView.ColumnHeaderContainerStyle&gt;&lt;Style TargetType="{x:Type GridViewColumnHeader}"&gt;&lt;Setter Property="Visibility" Value="Collapsed" /&gt;&lt;/Style&gt;&lt;/GridView.ColumnHeaderContainerStyle&gt;&lt;/GridView&gt;
    【解决方案2】:

    您也可以像这样将Style 内联:

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

    这可确保样式仅应用于所需的控件(即,不会无意中影响可能在 XAML 范围内的任何其他控件)。

    【讨论】:

    • 虽然两个答案都是正确的,但这是最优选的。谢谢。
    【解决方案3】:

    另一种应用 Ray 解决方案的方法如下:

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

    该解决方案直接设置样式属性,而不是创建自动应用的资源。不是说更好,只是另一种方式......

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 2010-11-07
      • 1970-01-01
      • 2016-03-29
      • 2016-04-26
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多