防止用户使用WPF ListView删除列

9njqaruj  于 2023-10-22  发布在  其他
关注(0)|答案(5)|浏览(148)

如何防止用户在ListView控件中删除GridViewColumns?

hrirmatl

hrirmatl1#

对于那些寻求更快,更简单的答案。
在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>

这个答案可能不像其他帖子那样优雅;但对我来说,我需要的只是一种快速的方法。
希望这对某人有帮助。

pu3pd22g

pu3pd22g2#

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

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

pxyaymoc3#

我找到了一个解决办法,也许有一天它会帮助别人;)
你必须覆盖GridViewColumnHeader的ControlTemplate(默认模板是here),并从模板中删除PART_HeaderGripper,以防止列的重复。
还有另一个解决方案,它提出了一个子类GridViewColumn描述here。出于表示的目的,我更喜欢XAML的解决方案,

thtygnil

thtygnil4#

一个平滑的解决方案:

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

sauutmhj5#

我能够做一些类似的指示在这篇文章
Link
我无法使用完整的XAML解决方案,因为我在代码中构建了所有内容,因为它是动态的。在第一次尝试时工作得很好。

相关问题