首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP中ResourceDictionaries的MergedDictionaries嵌套

UWP中ResourceDictionaries的MergedDictionaries嵌套
EN

Stack Overflow用户
提问于 2016-07-21 08:13:14
回答 2查看 1.2K关注 0票数 3

我试图在当前的UWP应用程序中拆分一个包含多个控件样式的ResourceDictionary。该文件已增加到大约3000行,并已成为一个可怕的地狱管理,所以我决定把它分成更小,更具体的ResourceDictionaries,并包括他们使用MergedDictionaries

App.xaml

代码语言:javascript
复制
<common:BootStrapper x:Class="Asteria.Ion.App"
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:common="using:Template10.Common"
                     xmlns:styles="using:Asteria.Ion.Styles"
                     RequestedTheme="Dark">

    <common:BootStrapper.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles\Custom.xaml" />
                <ResourceDictionary Source="Styles\CustomControls.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </common:BootStrapper.Resources>
</common:BootStrapper>

CustomControls.xaml包含对其他ResourceDictionaries的引用。

代码语言:javascript
复制
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="using:Template10.Controls"
    xmlns:behaviors="using:Template10.Behaviors"
    xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
    xmlns:local="using:Asteria.Ion.Styles">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Shared.xaml" />
        <ResourceDictionary Source="Templates.xaml" />
        <ResourceDictionary Source="ComponentBlock.xaml" />
        <ResourceDictionary Source="FlowAgent.xaml" />
        <ResourceDictionary Source="Planning.xaml" />
        <ResourceDictionary Source="ProjectDialog.xaml" />
        <ResourceDictionary Source="Inspector.xaml" /-->
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

这将始终产生以下异常:Failed to assign to property 'Windows.UI.Xaml.ResourceDictionary.Source' because the type 'Windows.Foundation.String' cannot be assigned to the type 'Windows.Foundation.Uri'. [Line: 12 Position: 37]

我已经多次尝试更改源URI,但它一直存在此错误。只有注释掉ResourceDictionary中的所有CustomControls.xaml元素才有帮助。当然,我也有一些关于风格缺失的例外。

我尝试过的一些URI格式:

  • /Styles/Shared.xaml
  • Styles/Shared.xaml
  • Styles\Shared.xaml
  • .\Shared.xaml
  • ms-appx:///Styles/Shared.xaml

他们都不管用。

如有任何建议,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-22 08:58:30

最后,它与URI结构无关,而是与ThemeDictionariesMergedDictionaries的组合有关。

以前起作用的是:

App.Resources

代码语言:javascript
复制
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Styles/Themes.xaml" />
    <ResourceDictionary Source="Styles/CustomControls.xaml" />
</ResourceDictionary.MergedDictionaries>

其中Themes.xaml包含ThemeDictionariesCustomControls.xaml包含<Styles> (很多)。

拆分CustomControls.xaml后,它不再包含任何样式,而只包含MergedDictionaries。看上去像这样:

代码语言:javascript
复制
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="ControlStyles/ProjectDialog.xaml" />
    <ResourceDictionary Source="ControlStyles/Inspector.xaml" />
</ResourceDictionary.MergedDictionaries>

Inspector.xaml包含一个使用{ThemeResource}Style,这似乎就是它出错的地方。最终的解决方案/解决方案是包含一个MergedDictionaries,并在Inspector.xaml中引用Themes.xaml

如果有人能解释这个解决方案背后的确切理由,我将不胜感激。

票数 4
EN

Stack Overflow用户

发布于 2016-07-22 08:42:29

从错误消息中,XAML编译器无法翻译嵌套ResourceDictionaries的Source属性。最简单和最快的解决方法是在App.Xaml.cs中添加嵌套的App.Xaml.cs

代码语言:javascript
复制
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
   ...
    var applicationMergedDics = Application.Current.Resources.MergedDictionaries;
    applicationMergedDics[0].MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ms-appx:///Styles/Shared.xaml") });
    applicationMergedDics[0].MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ms-appx:///Styles/Templates.xaml") });
    ...
    rootFrame.Navigate(typeof(MainPage), e.Arguments);
}

注意:不要忘记删除MergedDictionaries中的CustomControls.xaml。错误就会消失。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38498611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档