WPF - 使用来自另一个程序集的样式/资源

时间:2012-05-29 10:43:38

标签: wpf

我是WPF的新手,并且努力使用生活在单独程序集中的样式。这就是我正在做的事情: -

我有一个包含“generic.xaml”的\ Themes文件夹的类库项目,该文件夹合并来自\ Themes中的子文件夹的多个xaml文件: -

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Metro\CoreStyles.xaml" />
        ... etc ...
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

我的解决方案还有一个WPF应用程序项目,在这里,App.xaml合并了我的库项目中的资源,如下所示: -

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MyThemeLibrary;component/Themes/generic.xaml"/>    
        ... etc...            

到目前为止标准的东西。

最后,我有第三个项目 - 一个WPF用户控件库。这些控件使用这些常见样式,通常使用"Style={StaticResource SomeStyle}"。我可以运行应用程序,它看起来很好,但问题是我在编写用户控件时没有获得设计时支持 - 设计表面基本上是空的。

另一篇SO文章建议将App.xaml添加到用户控件库项目,并合并上述资源。这有效,我获得了设计时支持,但是在尝试构建解决方案时遇到错误:

Library project file cannot specify ApplicationDefinition element.  

我已尝试将App.xaml构建操作从“ApplicationDefinition”更改为“Page”,正如其他地方所建议的那样。这会使构建工作,但我失去了设计时支持,因为用户控件无法再看到样式。

有没有办法解决这个问题,或者是否有这种问题,另一种方法是使用另一个程序集中的样式?

提前致谢

安德鲁

1 个答案:

答案 0 :(得分:0)

错误消息说明了这一点。您不能在库项目中使用“pack:// application ...”语法。你应该在你的wpf项目中这样做。