阻止用户使用WPF ListView调整列的大小

Joa*_*mer 23 wpf listview gridview

如何阻止用户使用ListView控件调整GridViewColumns的大小?

Dar*_*ekt 28

对于那些寻求更快更简单的答案的人.

在ColumnHeaderContainerStyle中将IsEnabled设置为False.这将阻止用户调整大小.

像这样:

<GridView.ColumnHeaderContainerStyle>
  <Style TargetType="{x:Type GridViewColumnHeader}">
       <Setter Property="IsEnabled" Value="False"/>
  </Style>
</GridView.ColumnHeaderContainerStyle>
Run Code Online (Sandbox Code Playgroud)

如果要修复禁用的灰色颜色,请在IsEnabled属性上添加触发器并修复所需内容.

<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>
Run Code Online (Sandbox Code Playgroud)

这个答案可能不像其他发布的那样优雅; 但就我而言,我所需要的只是一种快速的方法.

希望这有助于某人.

  • 这个和InTheZone的答案都很好,但如果您需要列标题可以点击进行排序等,它们将无法正常工作. (5认同)
  • 优秀,最好的答案IMO,谢谢. (2认同)

InT*_*one 21

Darkonekt的答案很好,但是最好设置IsHitTestVisible为false而不是IsEnabled.这样做的好处是不会使标题变灰.

<GridView.ColumnHeaderContainerStyle>
    <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="IsHitTestVisible" Value="False"/>
    </Style>
</GridView.ColumnHeaderContainerStyle>
Run Code Online (Sandbox Code Playgroud)

  • 那么使用键盘调整大小呢? (2认同)

Joa*_*mer 14

我找到了一个解决方案,可能有一天会帮助其他人;)

您必须覆盖GridViewColumnHeader的ControlTemplate(此处为默认模板)并从模板中删除PART_HeaderGripper以防止调整列的大小.

还有另一个解决方案是在这里描述的子类化GridViewColumn .出于表示目的,我更喜欢xaml解决方案

  • 从可用性的角度来看,第一个解决方案更好,因为用户根本无法更改宽度。使用第二个选项,用户会看到一个光标,建议他可以调整列的大小,但它不会调整大小。 (2认同)