source

WPF ListView의 헤더를 숨기려면 어떻게 해야 합니까?

lovecheck 2023. 4. 27. 22:32
반응형

WPF ListView의 헤더를 숨기려면 어떻게 해야 합니까?

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>

스타일을 다음과 같이 정의합니다.

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

이렇게 바르세요.

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

또한 다음과 같이 입력할 수 있습니다.Style인라인 방식(아래 개선 사항 참조):

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

이렇게 하면 스타일이 원하는 컨트롤에만 적용됩니다(즉, XAML 범위 내에 있을 수 있는 추가 컨트롤에 의도치 않게 영향을 주지 않음).

[edit: 2022] 더 나은 해결책(이 페이지의 다른 곳에서는 언급되지 않음)은 헤더를 축소하는 것이 아니라 완전히 비활성화하는 것입니다.헤더를 "붕괴"(표시)할 계획이 없는 경우 WPF 레이아웃 엔진이 헤더를 고려해야 할 이유가 전혀 없습니다.

<ListView>
    <ListView.Resources>
        <Style TargetType="GridViewColumnHeader">
            <Setter Property="Template" Value="{x:Null}" />  <!-- way better. -->
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <!-- ... -->
        </GridView>
    </ListView.View>
</ListView>

위와 다른 점은 컨트롤을 설정하는 것입니다.Template하위 범위의GridViewColumnHeader의 예.{x:Null}이를 통해 WPF는 결코 렌더링되지 않을 헤더 인스턴스에 대한 준비를 피할 수 있습니다.

Ray의 솔루션을 적용할 수 있는 또 다른 방법은 다음과 같습니다.

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

솔루션은 자동으로 적용되는 리소스를 생성하는 대신 스타일 속성을 직접 설정합니다.그게 더 낫다는 말이 아니라 다른 방법일 뿐...

언급URL : https://stackoverflow.com/questions/632519/how-can-i-hide-the-header-of-a-wpf-listview

반응형