2012-02-26 43 views
1

我的問題是一個相當高層次的概念問題,所以如果您需要更多信息,請讓我知道。如何從模塊中正確設計棱鏡區域的樣式

我在學習棱鏡,模塊和區域使用WPF和MVVM。如果我們舉一個非常基本的例子,其中我有ModuleAViewOneModuleBViewOne,並且我想將它們都注入到主Shell中,但我的擔心在於樣式。我發現使用Prism和模塊的一個主要優點是ModuleA和ModuleB可能由不同的開發團隊開發。說,有可能他們看起來完全不同(風格)完全,當他們被注入主殼牌它看起來很奇怪。

所以我的第一個想法是在shell內提供控制這些模塊外觀的一般樣式。這很有效,直到ModuleView本身具有款式自己的。然後這些樣式不會被主殼牌覆蓋。

最好的做法是什麼(如果有的話),創建一個shell以及這些模塊的方式,使shell能夠完全控制模塊的外觀。另外我假設這是所需的行爲。如果我錯了,請糾正我。提前致謝。

回答

1

定義您的常見風格ShellApp.xaml。在你的模塊視圖中,在他們的樣式聲明中,使用BasedOn屬性來確保很多樣式被繼承。

例如在App.xaml

<Style x:Key="BrightTextBlock" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Foreground" Value="Green" /> 
</Style> 
在你的模塊意見

然後,定義自己的風格,像這樣:

<Style x:Key="MyModuleViewTextBlock" 
     TargetType="{x:Type TextBlock}" 
     BasedOn="{StaticResource BrightTextBlock}"> 
    <Setter Property="FontSize" Value="17" /> 
</Style> 

這將然後得到一個綠色的前景和17

一個字號

模塊應該對他們的風格有最大的控制,因爲樣式的範圍更小。如果你希望shell完全定義樣式,模塊視圖不應該定義他們自己的樣式。

+0

很好的答案!我很好奇'BasedOn'屬性。如果該資源不存在,模塊是否會引發運行時錯誤?或者簡單地設置字體大小爲17? – philt5252 2012-02-27 12:56:51

+0

如果'BasedOn'目標所在的資源不存在,我相信它會引發運行時錯誤。如果您希望獲得某種形式的條件式樣式繼承,請參閱[這裏](http://bea.stollnitz.com/blog/?p=384)以獲取如何編寫定製式標記的示例。 – Lukazoid 2012-02-27 12:59:19

+0

我遇到問題了。我的模塊視圖位於用戶控制庫項目中。它顯示在設計視圖罰款,但是當我運行應用程序說'提供價值'System.Windows.StaticResourceExtension'拋出一個異常 - 找不到資源 – 2012-03-23 18:21:56