gpt4 book ai didi

c# - 在 UWP 中使用 MergedDictionaries 嵌套 ResourceDictionaries

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:43 24 4
gpt4 key购买 nike

我正在尝试拆分包含当前 UWP 应用程序中多个控件样式的 ResourceDictionary。该文件已增长到大约 3000 行,已成为难以管理的人间 hell ,因此我决定将其拆分为更小、更具体的 ResourceDictionaries,并使用 MergedDictionaries 将它们包括在内。

App.xaml

<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 的引用。

<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>

这将始终产生以下异常:无法分配给属性“Windows.UI.Xaml.ResourceDictionary.Source”,因为类型“Windows.Foundation.String”无法分配给类型“Windows.Foundation.Uri”。 [行:12 位置:37]

我曾多次尝试更改源 URI,但它一直出现此错误。只有注释掉 CustomControls.xaml 中的所有 ResourceDictionary 元素才有帮助。但是后来我当然会得到关于缺失样式的异常。

我尝试过的一些 URI 格式:

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

它们都不起作用。

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

最佳答案

最终与URI结构无关,而是与ThemeDictionaries的组合有关和 MergedDictionaries .

之前的工作:

App.Resources :

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/Themes.xaml" />
<ResourceDictionary Source="Styles/CustomControls.xaml" />
</ResourceDictionary.MergedDictionaries>

在哪里Themes.xaml包含ThemeDictionariesCustomControls.xaml包含<Styles> (很多)。

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

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ControlStyles/ProjectDialog.xaml" />
<ResourceDictionary Source="ControlStyles/Inspector.xaml" />
</ResourceDictionary.MergedDictionaries>

Inspector.xaml包含一个 Style使用 {ThemeResource}看来这就是问题所在。最终的解决方案/解决方法是包含一个 MergedDictionaries引用 Themes.xamlInspector.xaml .

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

关于c# - 在 UWP 中使用 MergedDictionaries 嵌套 ResourceDictionaries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com