WPF让人哭笑不得的资源(二)
再吐槽一下(我已经无力吐槽)。今天又被资源搞了一天,发现了一个秘密。大家想听就跟随我...
以前写的一个东东,想用mvvm重新实现一下,由于之前的写得很乱,App.xaml里一坨一坨的,就把资源整到一个单独的资源文件里,然后到App.xaml去Merged,这思路是对的。然而当我整完之后,程序运行起来了,没问题,但是在VS2010编辑器里打开每个窗体或者用户控件的时候,就出错了,错误如下:
错误 1 “{DependencyProperty.UnsetValue}”不是 Setter 上“System.Windows.Controls.Border.BorderBrush”属性的有效值。
这个错不是什么大问题,不就是一个资源没有找到么,给它找到,或者不要这个资源,我估计就没问题了。于是想去找出错的资源,发现居然没有地方有明显的错误。一般双击错误里的行会自动导航到出错的地方,然而当我双击错误时,VS并没有给我导航到那里,这可有点难为我了,上万行的资源,叫我怎么去定位呢?各位大牛,如果是你遇到这情况,你会如何处理?
首先,我得确定到底是不是资源的问题,把App.xaml里Merged的东东全部注掉,不用资源,顶多运行时报个找不到资源的错误,界面还是起得来的。注掉后重新编译,果然界面是起来了,就是丑点,这是我希望看到的结果,现在可以确定,是资源引起的。
然后,我看他的错误,BorderBrush的值无效,Ctrl+F在资源文件里找到所有的属性名为BorderBrush的属性,看他引用的值,然后挨个找,结果大失所望,引用的资源全部能找到。
接着,我跟没改动之前的项目结构对比了一下,发现资源文件里需要引用到一些图片,之前资源文件和图片文件是在同一个目录下的,整合之后,图片文件在一个文件夹里,资源文件也在单独的文件夹里,我考虑,是不是没有找到图片资源呢(其实上面的步骤做下来脑子有点昏了),网上搜了下,Image的Source属性不管是设根目录,相对路径、绝对路径还是程序集路径,都解决不了这个问题,索性把这些图片引用统统去掉,到最后每次打开界面居然不报错了,界面依然加载不起来。而且我发现,在这个项目下面就算是新创建一个窗口或者用户控件,界面依然起不来,按常理新建的窗体赤裸裸的并不引用任何资源,应该是能起来的,有点虚了...
在这个解决方案下新建一个工程,再新建窗体,可以起来,起不来才怪呢,我怀疑是项目名称取得不好导致的,这想法我后来想想挺好笑的。
其实这时候已经没辙了,我可不想一个个重新去弄样式,那么多再来一遍不是几个小时能解决的。再想想,之前的项目怎么是好好的,现在怎么不好了,我只不过把App.xaml里面的东东挪了下位置而已,为何会有此结果?好吧,既然你有好用的,用对比工具对比一下,看看究竟哪里差了,不就行了,说干就干,BeyondCompare开起来,对比后的结果让我目瞪口呆。两个文件,除去没有关系的差异,真正影响到这个问题的差异就只有两行!哪两行呢,某个Style用到BorderBrush,好用的那个放在了上面,不好用的那个放在了这个Style的下面,位置一调,就正常了,我去啊。
xaml作为智能标记语言,没想到也这么蠢,吐槽一下,纯属牢骚,解释语言嘛,想想也不要要求太高,不过这个错真实错得无厘头。
总结:WPF涉及到资源的嵌套引用,被引用的资源要定义在引用的资源前面,否则,也没关系,只是编辑器里看不到漂亮的界面而已。
WPF让人哭笑不得的资源(二)的更多相关文章
- WPF让人哭笑不得的资源
前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...
- WPF让人哭笑不得的BUG
前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...
- wpf多程序集之间共享资源字典--CLR名称空间未定义云云
wpf多程序集之间共享资源字典--CLR名称空间未定义云云 分类: WPF 2012-10-28 10:57 1162人阅读 评论(0) 收藏 举报 以下介绍如何创建可用于在多个程序集之间共享的资源字 ...
- 【转】WPF中的Binding技巧(二)
WPF中的Binding技巧(二) 接上篇, 我们来看一看Elementname,Source,RelativeSource 三种绑定的方式 1.ElementName顾名思义就是根据Ui元素 ...
- WPF 引用DLL纯图像资源包类库中的图片
原文:WPF 引用DLL纯图像资源包类库中的图片 1.建立WPF应用程序 过程略. 2.创建类库项目(图片资源包) 创建图片资源类库项目MyImages,删除 ...
- 通通WPF随笔(3)——艺术二维码素材生成器
原文:通通WPF随笔(3)--艺术二维码素材生成器 最近公司让我开发一个条形码的生成控件,花了半天时间搞定觉得不过瘾,什么年代了该用二维码了吧.于是wiki了一下二维码的资料. 比较常见的就是QR码( ...
- WPF 面试题及答案(二)
一 · WPF中什么是样式? 首先明白WPF中样式属于资源中重要的一种. 同时样式也是属性值的集合,能被应用到一个合适的元素中,或者说能将一组属性应用到多个元素. WPF中样式可以设置任何依赖属性. ...
- WPF 绕圈进度条(二)
一 以前的方案 以前写过一个圆点绕圈的进度条,根据参数圆点个数和参数每次旋转角度,主要是在cs文件中动态添加圆点,通过后台定时器,动态设置角度后用正弦余弦计算(x,y)的位置. 此方案优点:动态添加L ...
- WPF中动态添加xaml资源文件
一.新建一个资源文件,然后设置其Build Actoin(生成操作)为Resource(资源): 二.在App.xaml.cs的StartUp事件或者是你需要的时机代码段写上如下代码: Resourc ...
随机推荐
- 函数式宏定义用do...while(0)的好处
函数式宏定义经常写成这样:<pre lang="c" escaped="true">#define device_init_wakeup(dev, ...
- 【UVa-442】矩阵链乘——简单栈练习
题目描述: 输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.如果乘法无法进行,输出error. Sample Input 9 A 50 10 B 10 20 C 20 5 D 30 35 E ...
- nginx的配置,要求根据不同的来路域名,发送到不同的端口去处理
这一台电脑上既有tomcat 也有 apache,他俩是没有办法同时享用80端口的.我现在让tomcat用8088,apache用8080,然后让nginx用80,这样nginx在收到请求后,根据不同 ...
- poj 3254(状态压缩基础题)
题意:就是你给一个n行m列的矩阵,矩阵里的元素由0和1组成,1代表肥沃的土地可以种植作物,0则不可以种植作物,并且相邻的土地不能同时种植作物,问你有多少种种植方案. 分析:这是我做的第一道状态压缩dp ...
- Drupal处理缓存的方式
Drupal的后台数据库中有很多以cache开头的表,这些都是Drupal的缓存数据表. Drupal的缓存机制使用了接口方式,所有的缓存对象都必须实现DrupalCacheInterface接口: ...
- 【LeetCode 234】Palindrome Linked List
Given a singly linked list, determine if it is a palindrome. 思路: 用快慢指针找到链表中点,反转后半部分链表,然后与前半部分进行匹配,随后 ...
- Range类中的三个方法及简单打印
package pkgFirst; import org.junit.Test; public class Range{ /** * FunName: println * Description : ...
- Code-first示例
首先创建一个空数据库 在vs2013中添加数据库类,按提示操作一直下一步 添加完以后,数据库类的代码 namespace mvctest.Models { using System; using ...
- effective c++:inline函数,文件间编译依存关系
inline函数 inline函数可以不受函数调用所带来的额外开销,编译器也会优化这些不含函数调用的代码,但是我们不能滥用Inline函数,如果程序中的每个函数都替换为inline函数那么生成的目标文 ...
- 调用openoffice Com组件转换成PDF
//例子 OpenOfficeExportToPDF('file:///C:/SourceFile.odt', 'file:///C:/TargetFile.pdf'); 必须为URL格式的路径 ...