防止用户使用 WPF ListView 调整列大小

问题描述 投票:0回答:5

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

wpf gridview listview
5个回答
35
投票

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

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

像这样:

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

如果您想修复禁用的灰色颜色,请在 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>

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

希望这对某人有帮助。


30
投票

Darkonekt 的答案很好,但是最好将

IsHitTestVisible
设置为 false 而不是
IsEnabled
。这样做的好处是不会使标题变灰。

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

15
投票

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

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

还有另一种解决方案,它通过子类化 GridViewColumn 来描述here。出于表示目的,我更喜欢仅使用 xaml 的解决方案


0
投票

顺利解决:

<GridViewColumn ...>
    <GridViewColumn.HeaderContainerStyle>
        <Style TargetType="{x:Type FrameworkElement}">
            <Setter Property="IsHitTestVisible" Value="False"/>
        </Style>
    </GridViewColumn.HeaderContainerStyle>
</GridViewColumn>

-2
投票

我能够按照这篇文章中的说明做类似的事情

链接

我无法使用完整的 XAML 解决方案,因为由于其动态性,我在代码中构建了所有内容。第一次尝试效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.