WPF中当资源之间相互依赖(xaml资源与类对象资源相互依赖)时,常见无法加载的问题
来源:互联网 发布:男生最喜欢的姿势知乎 编辑:程序博客网 时间:2024/06/05 02:22
在WPF中,好多界面元素(UIElement,是不是所有的还不确定?)都有资源Resources属性。我们经常在窗体或Application对象中添加资源,常见的有xaml资源、Singleton对象(转换器、模板选择器、其它一些资源类等等,类本身不是Singleton的,但框架只加载一次并放到资源容器中供程序绑定使用,实质就是单个实例对象,此处用Singleton表述,不一定贴切),常见写法如下:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ........./>
<Window.Resources>
<ResourceDictionary>
<ReourceDictionary.MergedDictionaries>
<ResourceDictionary Source="mypath\abc1.xaml"/> //注:mypath是相对路径。如果在vs中创建了mypath文件夹,并将abc1.xaml放在mypath中,则必须写出其相对路径(文件夹名),否则加载时会找不到的,这与编写的c#类的加载机制是不同的,类文件无论是放在项目文件夹下的那个子文件夹中,都不需要管,IDE自己都能找到。
<ResourceDictionary Source="mypath\abc2.xaml"/>
</ResouceDictionary.MergedDictionaries>
<local:MyTemplateSelector x:Key="MyTemplateSelector" TemplateProperty1={StaticResource TemplateProperty1} TemplateProperty2={StaticResource TemplateProperty2} />
<local:MyTemplateSelector2 x:Key="MyTemplateSelector" Template2Property1={StaticResource Template2Property1} Template2Property2={StaticResource Template2Property2} />
</ResourceDictionary>
</Window.Resources>
.....
</Window>
在以上代码中,Window.Resources属性中放置了两个资源字典文件abc1.xaml,abc2.xaml,还有两个模板选择器,而模板选择器对象中需要注入两个属性TemplateProperty1和TemplateProperty2。通常情况下,模板选择器会依赖于资源字典文件(比如abc1.xaml,abc2.xaml)。wpf程序在加载的时候,会先加载xaml之类的资源字典文件,然后实例化Singleton对象,通常情况不会造成错误。
然而,如果xaml文件中还存在依赖TemplateSelector的情况(比如在xaml格式的数据模板中,还要应用模板选择器进一步进行模板选择的工作),此时在加载xaml字典文件时,由于TemplateSelector(以下记做TemplateDependedTemplateSelector)还没有实例化,这是在资源字典文件加载过程中就会遇到错误。一种可行的方式是:利用Application对象中的Resources属性,把TemplateDependedTemplateSelector及其依赖的xaml字典文件放到App.xaml中的 <Application.Resources>标签中,把依赖于TemplateDependedTemplateSelector的xaml字典文件放到Window.Resources中。这样,由于程序会现行加载app.xaml文件中写入的资源,所以TemplateDependedTemplateSelector及其依赖的xaml字典文件会现行加载,而依赖于TemplateDependedTemplateSelector的xaml文件会后加载,就可以解决问题。另外一种更直接的方法是:把TemplateDependedTemplateSelector及其依赖的xaml字典文件放到Window.Resources中,把依赖于TemplateDependedTemplateSelector的xaml字典文件及对应的Selector类对象直接放到需要用到的界面元素中,比如放到ContentControl.Resources中。
- WPF中当资源之间相互依赖(xaml资源与类对象资源相互依赖)时,常见无法加载的问题
- WPF xaml中加载Resources图片资源
- 【Spring】资源注入整合 及 Properties相互依赖的解决方案
- C# 中WPF BitmapImage资源无法释放的问题
- maven工程之间的相互依赖
- WPF 中资源路径的问题
- WPF 中资源路径的问题
- Gradle 与 Android的相互依赖
- WPF 启动类(窗口)移动到项目的子目录之后,无法启动程序,找不到xxx.xaml资源
- WPF BitmapImage 占用资源无法释放、无法删除的问题
- 库与库之间相互依赖解决方法
- 类的相互依赖导致StackOverflowError
- WPF下的资源问题
- WPF初学者之XAML的资源(Resources)结构
- WPF初学者之 XAML的资源(Resources)结构
- wpf的样式与资源
- WPF——找不到资源window1.xaml
- WPF——找不到资源mainwindow.xaml
- UML类图中方法(操作)的表示格式
- 数据库系统概述
- 洛谷 [模板]最小生成树
- HDU 4004 The Frog's Games (二分 + 贪心 青蛙跳石头)
- 百万学子明天勇闯数学考研关,考研趣闻
- WPF中当资源之间相互依赖(xaml资源与类对象资源相互依赖)时,常见无法加载的问题
- servlet&JSP
- servlet&JSP
- youtobe视频随便下,不用跳墙
- iOS与h5交互
- OOP特征
- Ubuntu 14搭建Nginx-RTMP流媒体服务器
- [易水寒]大一实训笔记 第二篇
- Spark RDD 2012 论文笔记