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

4

我刚接触 WPF,正在苦于如何使用存在于另一个程序集中的样式。以下是我的操作步骤:

我有一个类库项目,其中包含一个 \Themes 文件夹,其中有一个 "generic.xaml" 文件,该文件合并了 \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
错误信息已经说明了问题。在库项目中,您不能使用“pack://application...”语法。您应该在您的WPF项目中这样做。

错误提示我一个库项目不能包含一个构建类型为“ApplicationDefinition”的文件。我可以删除App.xaml来消除错误,但我的问题是如何在用户控件库中获得设计时支持? - Andrew Stephens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接