【发布时间】:2014-03-10 22:14:17
【问题描述】:
我在不同项目之间共享通用样式时遇到了一些问题。这是我的项目:-
- “Common” - 一个包含常见 WPF 样式的类库。
- “插件”- 包含用户控件(不是自定义控件)的类库。
- “核心应用程序”- 核心 WPF 应用程序,显示“插件”中定义的用户控件。
“通用”和“核心应用”位于同一个解决方案中,而“插件”位于其自己的解决方案中。
“核心应用”项目中的样式工作正常 - 它引用“通用”项目并在 App.xaml 中有以下内容:-
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/MyStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
在“核心应用”项目中编辑 XAML 文件时,我在样式名称上得到了智能感知,没有波浪下划线,并且在运行时一切正常。
问题出在“插件”项目上。我引用了“Common”程序集,并创建了一个 \Themes\Generic.xaml 文件,其中包含与上述相同的合并 XAML。 Generic.xaml 有一个“Page”的构建操作,我在 AssemblyInfo.cs 中添加了以下内容:-
[assembly: ThemeInfo(ResourceDictionaryLocation.None,
ResourceDictionaryLocation.SourceAssembly)]
当我在此“插件”项目中编辑用户控件的 XAML 时,“通用”程序集中的样式不会显示在智能感知中,并且 VS/Resharper 在其名称下放置了一条波浪线。我什至直接在 Generic.xaml 中添加了一个样式,但 UC 也看不到。用户控件看起来像这样:-
<UserControl ..blah..>
<StackPanel>
<TextBlock Style="{StaticResource AStyleInCommonAssembly}" Text="Hello"/>
<TextBlock Style="{StaticResource AStyleInGenericXaml}" Text="World"/>
</StackPanel>
</UserControl>
在运行时,WPF确实正确地应用了驻留在“Common”程序集中的样式(我猜它是由于 App.xaml 中的字典合并而找到它们的)。但是它仍然无法找到我直接添加到 Generic.xaml 的样式。
我错过了什么?这种方法是否仅适用于自定义控件,而不适用于我正在处理的 用户控件?我的首要任务是让事情在运行时工作,但获得设计时/智能感知体验将是一个奖励。
【问题讨论】:
标签: wpf