加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

使用MergedDictionaries(UWP)拆分generic.xaml文件的正确语法是

发布时间:2020-12-14 04:25:38 所属栏目:Windows 来源:网络整理
导读:考虑我创建包含一组自定义控件的库MyCustomControlsProject的情况.我想在一个非常大的generic.xaml中放置所有这些控件的XAML代码,而不是将每个控件放在自己的XAML文件中,然后从generic.xaml引用该文件. ResourceDictionary.MergedDictionaries ResourceDicti
考虑我创建包含一组自定义控件的库MyCustomControlsProject的情况.我想在一个非常大的generic.xaml中放置所有这些控件的XAML代码,而不是将每个控件放在自己的XAML文件中,然后从generic.xaml引用该文件.

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="<url_syntax_file_1>" />
    <ResourceDictionary Source="<url_syntax_file_2>" />
</ResourceDictionary.MergedDictionaries>

解决方案资源管理器(以及文件系统)中的文件夹结构如下所示:

> MyCustomControlsProject(项目/文件夹)

>主题(文件夹)

> Generic.xaml(文件)
> ControlTemplates(文件夹)

> MyControl1.xaml(文件)
> MyControl2.xaml(文件)

在过去,我使用以下语法在Silverlight和Silverlight for Win Phone中执行此操作:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/MyCustomControlsProject;Component/Themes/ControlTemplates/MyControl1.xaml"/>
    <ResourceDictionary Source="/MyCustomControlsProject;Component/Themes/ControlTemplates/MyControl2.xaml"/>
</ResourceDictionary.MergedDictionaries>

对于使用此语法的Windows Phone 8.1:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="ms-appx:///Themes/ControlTemplates/MyControl1.xaml" />
    <ResourceDictionary Source="ms-appx:///Themes/ControlTemplates/MyControl2.xaml" />
</ResourceDictionary.MergedDictionaries>

这些语法都不适用于Win 10(UWP).尝试使用这些会导致运行时异常:

An exception of type 'Windows.UI.Xaml.Markup.XamlParseException' occurred in MyApplication.exe but was not handled in user code
WinRT information: 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'.

我也试过这种语法导致了同样的异常:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="ControlTemplates/MyControl1.xaml" />
    <ResourceDictionary Source="ControlTemplates/MyControl2.xaml" />
</ResourceDictionary.MergedDictionaries>

有趣的是,似乎app.xaml使用上面的语法没有问题.

有没有人知道generic.xaml中ResourceDictionary节点中source属性中url字符串的正确语法?或者这是UWP没有赶上的东西吗?

解决方法

正确的语法是:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="ms-appx:///MyCustomControlsProject/Themes/ControlTemplates/MyControl1.xaml" />
    <ResourceDictionary Source="ms-appx:///MyCustomControlsProject/Themes/ControlTemplates/MyControl2.xaml" />
</ResourceDictionary.MergedDictionaries>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读