代码之家  ›  专栏  ›  技术社区  ›  ivke

UWP-来自不同样式资源字典的引用StaticResource:未能分配给属性的窗口。用户界面。Xaml。资源字典。来源'

  •  5
  • ivke  · 技术社区  · 7 年前

    您好,我的团队和我最近开始开发win10 uwp应用程序。应用程序将有很多视图和组件,因此需要大量使用样式,因此我们需要通过文件/文件夹结构来组织样式。我们使用以下结构来组织样式(不幸的是,我还无法嵌入图像,请参见链接):

    https://i.stack.imgur.com/XvW0u.png

    无论如何,我的资源。xaml将所有其他字典合并如下:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Resources/Colors.xaml" />
            <ResourceDictionary Source="/Resources/Icons.xaml" />
            <ResourceDictionary Source="/Resources/Fonts.xaml" />
            <ResourceDictionary Source="/Resources/Converters.xaml" />
            <ResourceDictionary Source="/Resources/Buttons.xaml" />
            <ResourceDictionary Source="/Resources/RadioButton.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    

    在我的应用程序中。xaml I引用此词典:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Resources.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
        </ResourceDictionary>
    </Application.Resources>
    

    现在我设法在我的单选按钮中找到了问题的根源。xaml I引用以颜色定义的笔刷。使用静态资源查找的xaml:

    <Setter Property="Foreground" Value="{StaticResource TopMenuTextBrush}" />
    

    如果我删除这一行,一切都会开始,但有以下例外:

    • 异常{Windows.UI.Xaml.Markup.XamlParseException:找不到与此错误代码关联的文本。

    未能分配给属性 '窗口。用户界面。Xaml。资源字典。“源”,因为类型 '窗口。地基无法将字符串“”分配给类型 '窗口。地基Uri'。[行:28位置:37]}系统。例外 {Windows.UI.Xaml.Markup.XamlParseException}

    有趣的是,当我用这行注释和取消注释启动应用程序时,visual studio将识别画笔并正确应用它,它只在应用程序启动时中断。 我们以前在开发WPF时使用了相同的方法,所以我认为这可能与应用程序部署有关。

    非常感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  6
  •   Nico Zhu    7 年前

    异常={Windows.UI.Xaml.Markup.XamlParseException:找不到与此错误代码关联的文本。

    问题是你用错了 ResourceDictionary 来源我找到了 Resources.xaml 和其他xaml文件存储在屏幕截图的同一级别目录中。因此,您无法在源代码中声明这些xaml文件的父目录。请按如下方式修改ResourceDictionary

    <ResourceDictionary Source="Colors.xaml"/>
    

    有关更多信息,请参阅 ResourceDictionary and XAML resource references