我无法让按钮样式在具有四个模块的 Prism 4.0 应用程序中工作。 下面是模块 2 中 xaml 视图文件中的按钮元素:
<Button Name="add" Width ="60" Style="{DynamicResource Red}" Click="add_Click"> Add</Button>
应用生成并运行,但不显示按钮颜色。 我已经在 Shell 模块的"主题"文件夹中的 Generic.xaml 文件中定义了样式。 这应该是可以放置要在模块之间共享的样式的地方。 在 Generic.xaml 文件中,我有:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Shell.Controls"
xmlns:wc="clr-namespace:System.Windows.Controls;assembly=PresentationFramework">
<Style
x:Key="{ComponentResourceKey
TypeInTargetAssembly={x:Type wc:Button},
ResourceId=Red}"
TargetType="wc:Button">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
我在 Shell 项目的"属性"文件夹中的 AssemblyInfo.cs 文件中也有必要的引用。 这应该指示 Prism 应用解析 Prism Generic.xaml 文件中的所有样式引用:
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
这些仍然是我开始使用的 Prism WPF Unity 模板提供的原始设置,由 David Hill 的博客 [http://blogs.msdn.com/b/dphill/archive/2011/01/16/prism-4-0-template-pack-now-available.aspx] 提供。 该模板在 Generic.xaml 中已经带有一些样式,但裸模板应用仅将这些样式用于 Shell 程序集中的控件,因此上面显示了参数"None"和"SourceAssembly"。
由于我正在尝试定义用于 Shell 模块以外的模块的样式,因此我将以下 ThemeInfo 属性添加到模块 1 和 Module2L 的 AssemblyInfo.cs
[`assembly: ThemeInfo(ResourceDictionaryLocation.ExternalAssembly, ResourceDictionaryLocation.ExternalAssembly)]`
我尝试在App.xaml中添加一个ThemeDictionary扩展到App.xaml,就像在App.xaml中一样,但没有结果。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="{ThemeDictionary MyApp}"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
还在 App.xaml 中尝试了这样的包网址,并收到"找不到资源"错误。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyApp;Shell/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
关于缺少什么的任何想法或想法?谢谢。
更新:我通过技术支持从Microsoft的Marc Rodman那里得到了答案。 两个变化:
一个是在 Generic.xaml 中,将样式定义更改为:
<Style
x:Key="Red"
TargetType="Button">
<Setter Property="Foreground" Value="Red" />
</Style>
另一个更改是 App.xaml:
<Application.Resources>
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/Shell;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>