2012-07-05 35 views
3

我有一個應用程序,使用GridView佈局的ListView控件很多。所有這些使用自定義StylecustomStyle。我想在所有這些ListView控件中禁用列重新排序。禁用WPF中的列重新排序樣式

我可以在不使用現有Style的情況下觸摸所有控件嗎?我試過了,但它似乎沒有工作:

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

謝謝!

更新:如果這是不可能的,有沒有辦法在我的應用程序默認禁用列重新排序?

更新: 我也試過這,這是行不通的。可能是因爲GridView沒有Style屬性。

​​

回答

0

我使用ListView控件的附加依賴屬性解決了這個問題。這個屬性會在GridView上設置屬性。從我的風格我可以設置這個附加的依賴屬性。仍然不是一個好的解決方案,但它的工作。

0

檢查此answer

嘗試使用此屬性在您的網頁中設置所有GridView的默認樣式。

編輯:創建從GridView繼承新類。並在構造函數中更改AllowsColumnReorder屬性的值或將靜態構造函數中依賴項屬性AllowsColumnReorderProperty的默認值更改爲false。在你的所有頁面中使用這個類來顯示列表視圖。

編輯2:覆蓋依賴屬性的最好方法 - 在靜態構造函數中使用OverrideMetadata方法。

我已經厭倦了使用類似

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

不過,這並不編譯。

+0

我試過了。但是,GridView沒有Style屬性。 – aKzenT 2012-07-05 18:10:25

+0

檢查我的編輯答案。 – RredCat 2012-07-05 18:20:38

+0

這是一個非常難看的解決方案。我不僅需要觸摸應用程序中的每個ListView,這正是我想要避免的,還必須創建一種新的GridView才能更改默認值。有可能是一種方式。 – aKzenT 2012-07-05 21:48:27

0

您可以在您的示例中刪除x:key,將其移至app.xaml,並將其設置爲應用中所有GridView的默認樣式。

+0

GridView似乎不允許這種樣式。 – aKzenT 2012-07-05 18:11:14

+0

你必須檢查GridView的默認模板,並找到通過的方式。要獲取模板,請在Expression blend中打開,然後單擊'Template-> Edit a copy' – Tilak 2012-07-06 03:43:49

5

這裏是你應該做的事情:

在這種風格定義

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

有一個

<GridViewHeaderRowPresenter 

,它有一個屬性AllowsColumnReorder 苦也代碼爲false。

...

我知道...... 兩歲的線程。 但我敢打賭,人們仍然閱讀它。

0

只需簡單地添加這個屬性的數據網格標籤

CanUserResizeColumns="False"