2012-02-26 9 views
1

私の質問は、かなり高レベルな概念の質問ですので、もっと情報が必要な場合は教えてください。モジュールからプリズム領域を正しくスタイルする方法

私は、WPFとMVVMを使用してモジュールと地域でPrismを学んでいます。 ModuleAViewOneModuleBViewOneという非常に基本的な例をとり、それらを両方ともメインShellに注入したいのであれば、私の懸念はスタイルにあります。 ModuleAとModuleBは、異なるチームの開発者によって潜在的に開発される可能性があるという事実に、プリズムとモジュールを使用する大きな利点があります。そうだとすれば、が完全に(スタイルが賢明)と異なる可能性があり、メインシェルに注入されると奇妙に見えることがあります。

私の最初の考えは、これらのモジュールの外観を制御するシェル内の一般的なスタイルを提供しています。これは、ModuleView自体がのスタイルを持つまで素晴らしいです。これらのスタイルは、メインシェルによってオーバーライドされません。

シェルを作成する際のベストプラクティス(存在する場合)と、モジュールがどのように見えるかをシェルが完全に制御できるようにモジュールを最適化する方法があります。また、私はそれが望ましい動作であると仮定しています。私が間違っているなら、私を修正してください。前もって感謝します。

答えて

1

共通のスタイルをShellまたはApp.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

のフォントサイズを取得します

スタイルのスコープが狭いため、モジュールはそのスタイルを最も制御する必要があります。シェルがスタイルを完全に定義することを望むならば、モジュールビューは独自のスタイルを定義するべきではありません。

+0

素晴らしい回答!私は 'BasedOn'属性が不思議です。そのリソースが存在しない場合、モジュールは実行時エラーをスローしますか?または単にフォントサイズを17に設定しますか? – philt5252

+0

'BasedOn'でターゲットとするリソースが存在しない場合は、ランタイムエラーが発生すると思います。条件付きスタイルの継承を希望する場合は、カスタムマークアップを作成する方法の例について、[こちら](http://bea.stollnitz.com/blog/?p=384)をご覧ください。 – Lukazoid

+0

これを問題にしています。私のモジュールビューはユーザコントロールライブラリプロジェクトにあります。これは、デザインビューでは正常に表示されますが、アプリケーションを実行すると 'System.Windows.StaticResourceExtension'の値を提供すると例外がスローされました - リソースが見つかりません –

関連する問題