【问题标题】:Unable to reference BrushResource in linked ResourceProject from Style ResourceDictionary无法从 Style ResourceDictionary 引用链接 ResourceProject 中的 BrushResource
【发布时间】:2023-09-08 21:28:02
【问题描述】:

我的应用程序中有一个项目,我在其中保留了所有资源和可重用的自定义控件类(包括样式、画笔、自定义控件等)。

我的应用程序的“主”项目的 App.xaml 文件引用了引用我所有组织的 ResourceDictionary 文件的 ResourceLibrary 文件,如下所示:

     <Application.Resources>
   <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ControlResources;component/ResourceDictionaries/ResourceLibrary.xaml"/>
            <ResourceDictionary Source="Simple Styles.xaml"/>     
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="{x:Type Window}">
            <Setter Property="FontFamily" Value="Segoe UI" />
        </Style>

        <Style TargetType="{x:Type Rectangle}" /> 

    </ResourceDictionary>


</Application.Resources>

注意:我正在关注这篇文章here,其中包括一个大修复(上面包含的矩形样式)。

下面是我的“ControlResources”项目的快照。

当我从我的主项目“GlenwareMaster”中引用样式和 customControl 资源时,它们的引用效果很好,但是当从任何样式资源中引用“画笔”下的画笔资源时,应用程序显然找不到它们。

我的问题:我可以只添加一个项目自引用链接(固有的右键单击混合功能吗?)。如何获取样式 ResourceDictionaries 以在同一项目中定位 Brush ResourceDictionaries?

提前致谢!

【问题讨论】:

    标签: wpf xaml resourcedictionary


    【解决方案1】:

    您是如何在您的风格词典中引用画笔资源词典的?确保您使用的是包 URI 并且它们是正确的。

    我的标准做法是在我计划在另一个资源字典中引用的任何资源字典中使用绝对包 uri 格式 - 如果您将来最终将其移动到另一个项目,会导致更少的错误。当您在常用样式资源字典中引用画笔时,请尝试以下操作:

    <ResourceDictionary Source="pack://application:,,,/ControlResources;component/ResourceDictionaries/Brushes/MyBrushes.xaml"/>
    

    您可以在此处阅读有关 Pack URI 的更多信息:http://msdn.microsoft.com/en-us/library/aa970069.aspx

    【讨论】:

    • 非常感谢@Jesper 这么快的回复。您知道有什么方法可以让我将 Color/Brush ResourceDictionary 提供给同一项目的所有其他 ResourceDictionary 文件,而不必为每个文件再次重新引用源文件?感谢您的帮助:)
    • 我不知道。如果您有一组要包含在整个项目中的共享资源字典,则可以将它们合并到一个通用字典中,如果您担心合并字典的数量,可以参考该字典。否则,您必须以一种或另一种方式指定它。
    • 非常感谢 :) 现在我很清楚这是我唯一的选择。