2011-03-11 23 views
4

所以我想爲應用程序實現admin, non-admin (casual)用戶樣式特權,但它只在GUI級別上。如何根據不同類型的用戶隱藏,啓用,更改WPF GUI?

因此,例如,要禁用一些GridViewColumns,隱藏一些按鈕等

是什麼在WPF做到這一點的正確方法?

我打算爲用戶類型實現一個枚舉。但之後,我不知道如何啓用/禁用GridViewColumns,隱藏/顯示按鈕。

任何想法?

回答

2

這取決於你是否希望能夠在飛行中改變主題(因爲實質上這就是你想要做的)(我假設你這麼做)。

我沒有這個做我自己,但我想應該是這樣的:

  1. 使用ContentTemplate或每一塊UI,你想使主題化
  2. 請參閱這些一DataTemplate模板使用{DynamicResource}
  3. 是否有資源從您的應用程序資源中提取;您將有將它們作爲ResourceDictionary對象,一個每個「主題」,使用ResourceDictionary.MergedDictionaries
  4. 每當你想改變「主題」,編程方式刪除所有當前合併的詞典,添加了對應於期望的「主題」
的一個

爲了說明,您Application將使用默認的字典是這樣的:

<Application.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="themes\default.theme.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

而且你會添加/刪除字典的東西,如

ResourceDictionary theme = (ResourceDictionary)Application.LoadComponent(themeUri); 
Resources.MergedDictionaries.Add(theme); 

更新:我搜索了一下,發現的一個更完整的例子就是我「M描述:Can WPF themes be used to include multiple skins for an application that can be changed at runtime?

+0

感謝喬恩,你的意思是我應該設計不同的XAML文件爲每個主題?如果是這樣的話,最初的基礎xaml會是什麼樣子?只是一個空的xaml代碼與你顯示的app.resources? – 2011-03-11 00:53:56

+1

@Joan:幾乎無論你喜歡什麼。我將從「真正的」默認主題開始,但它確實取決於用戶的信息何時/如何提供給您的應用程序。 – Jon 2011-03-11 00:57:15

+0

謝謝喬恩,我想我現在明白了。 – 2011-03-11 01:10:33

2

一種實現方式是創建一個包含權限的對象,將其綁定到根數據上下文,並使用屬性觸發器來啓用/禁用UI的各個部分。其他信息可以在here找到。

相關問題