如何从模块中正确设置棱镜区域的样式

时间:2012-02-26 17:31:06

标签: wpf xaml prism

我的问题是一个相当高级别的概念问题,所以如果您需要更多信息,请告诉我。

我正在学习Prism,模块和区域使用WPF和MVVM。如果我们采用一个非常基本的示例,我有ModuleAViewOneModuleBViewOne,并且我想将它们都注入主Shell,我关注的是样式。我认为使用Prism和模块的一个主要优点是ModuleA和ModuleB可能由不同的开发团队开发。说,他们有可能看到完全不同(风格方面),当他们被注入主壳时,它看起来很奇怪。

所以我的第一个想法是在shell中提供控制这些模块外观的一般样式。这很有效,直到ModuleView本身具有 自己的 样式。然后这些样式不会被主要的Shell覆盖。

最佳实践(如果有的话)是什么,在创建shell和模块时,shell可以完全控制模块的外观。我也假设这是理想的行为。如果我错了,请纠正我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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完全定义样式,则模块视图不应定义自己的样式。