Prevent user from resizing columns with WPF ListView

后端 未结 5 1641
慢半拍i
慢半拍i 2020-12-06 04:27

How can I prevent a user from resizing GridViewColumns withing a ListView control?

相关标签:
5条回答
  • 2020-12-06 04:56

    A smooth solution:

    <GridViewColumn ...>
        <GridViewColumn.HeaderContainerStyle>
            <Style TargetType="{x:Type FrameworkElement}">
                <Setter Property="IsHitTestVisible" Value="False"/>
            </Style>
        </GridViewColumn.HeaderContainerStyle>
    </GridViewColumn>
    
    0 讨论(0)
  • 2020-12-06 05:03

    i found a solution and probably it will help someone else someday ;)

    you have to override the GridViewColumnHeader's ControlTemplate (default template is here ) and remove the PART_HeaderGripper from the template in order to prevent resizing of your columns.

    there is another solution that comes up with subclassing GridViewColumn described here. for representation purposes i prefer xaml only solutions though

    0 讨论(0)
  • 2020-12-06 05:04

    I was able to do something similar with the instructions in this post

    http://blogs.msdn.com/b/atc_avalon_team/archive/2006/04/11/573037.aspx

    I wasn't able to use a full XAML solution, since I was building everything in my code behind due to the dynamics of it. Worked great on the first try.

    0 讨论(0)
  • 2020-12-06 05:05

    For those looking for a quicker and simpler answer.

    Set IsEnabled to False in the ColumnHeaderContainerStyle. This will prevent the user from resizing.

    Like this:

    <GridView.ColumnHeaderContainerStyle>
      <Style TargetType="{x:Type GridViewColumnHeader}">
           <Setter Property="IsEnabled" Value="False"/>
      </Style>
    </GridView.ColumnHeaderContainerStyle>
    

    If you want to fix the disabled grayed out color add a trigger on the IsEnabled property and fix what you need.

    <GridView.ColumnHeaderContainerStyle>
       <Style TargetType="{x:Type GridViewColumnHeader}">
           <Setter Property="IsEnabled" Value="False"/>
        <Style.Triggers>
           <Trigger Property="IsEnabled" Value="False">                
              <Setter Property="TextElement.Foreground" Value="Black"/>                       
           </Trigger>
        </Style.Triggers>
      </Style>
    </GridView.ColumnHeaderContainerStyle>
    

    This answer might not be as elegant as other posted; but in my case all I needed was a quick way of doing it.

    Hope this helps someone.

    0 讨论(0)
  • 2020-12-06 05:06

    Darkonekt's answer is good, however it may be preferable to set IsHitTestVisible to false instead of IsEnabled. This has the benefit of not greying out the headers.

    <GridView.ColumnHeaderContainerStyle>
        <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="IsHitTestVisible" Value="False"/>
        </Style>
    </GridView.ColumnHeaderContainerStyle>
    
    0 讨论(0)
提交回复
热议问题