使用Style禁用WPF中的列重新排序

时间:2012-07-05 09:32:39

标签: .net wpf xaml listview .net-4.0

我的应用程序包含许多使用ListView布局的GridView控件。所有这些都使用自定义Style customStyle。我想在所有这些ListView控件中禁用列重新排序。

我可以在不使用现有Style触及所有控件的情况下执行此操作吗?我尝试了这个,但它似乎不起作用:

<Style x:Key="customStyle"
       BasedOn="{StaticResource ResourceKey={x:Type ListView}}"
       TargetType="{x:Type ListView}">
    <Setter Property="GridView.AllowsColumnReorder" Value="False" />
    ...
</Style>

谢谢!

更新:如果无法做到这一点,是否有办法在我的应用程序中默认禁用列重新排序?

更新 我也试过这个,但是没有用。可能是因为GridView没有Style属性。

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

5 个答案:

答案 0 :(得分:5)

这是你应该做的:

在此样式定义中

<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer">

有一个

<GridViewHeaderRowPresenter

它有一个属性allowsColumnReorder 硬编码为假。

...

我知道...... 两岁的线程。 但我敢打赌,人们仍然会读它。

答案 1 :(得分:0)

选中answer

尝试使用此属性设置网页中所有GridView的默认样式。

编辑:创建从GridView继承的新类。并在构造函数中更改AllowsColumnReorder属性的值,或者将静态构造函数中依赖项属性AllowsColumnReorderProperty的默认值更改为false。并将此课程用于所有页面中的列表视图。

编辑2 :覆盖依赖项属性的最佳方法 - 在静态构造函数中使用OverrideMetadata方法。

我已经厌倦了使用像

这样的东西

<Setter Property="(ListView.View).(GridView.AllowsColumnReorder)" Value="False"/>

但它没有编译。

答案 2 :(得分:0)

您可以删除示例中的x:key,将其移至app.xaml,并将其设置为应用中所有GridView的默认样式。

答案 3 :(得分:0)

我使用ListView控件的附加依赖项属性解决了这个问题。然后,此属性将在GridView上设置该属性。从我的Style我可以设置这个附加的依赖属性。仍然不是一个很好的解决方案,但它确实有效。

答案 4 :(得分:0)

只需将此属性添加到datagrid标记

即可
CanUserResizeColumns="False"