再吐槽一下(我已经无力吐槽)。今天又被资源搞了一天,发现了一个秘密。大家想听就跟随我...

  以前写的一个东东,想用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让人哭笑不得的资源(二)的更多相关文章

  1. WPF让人哭笑不得的资源

    前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...

  2. WPF让人哭笑不得的BUG

    前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...

  3. wpf多程序集之间共享资源字典--CLR名称空间未定义云云

    wpf多程序集之间共享资源字典--CLR名称空间未定义云云 分类: WPF 2012-10-28 10:57 1162人阅读 评论(0) 收藏 举报 以下介绍如何创建可用于在多个程序集之间共享的资源字 ...

  4. 【转】WPF中的Binding技巧(二)

    WPF中的Binding技巧(二)     接上篇, 我们来看一看Elementname,Source,RelativeSource 三种绑定的方式 1.ElementName顾名思义就是根据Ui元素 ...

  5. WPF 引用DLL纯图像资源包类库中的图片

    原文:WPF 引用DLL纯图像资源包类库中的图片 1.建立WPF应用程序              过程略.   2.创建类库项目(图片资源包)       创建图片资源类库项目MyImages,删除 ...

  6. 通通WPF随笔(3)——艺术二维码素材生成器

    原文:通通WPF随笔(3)--艺术二维码素材生成器 最近公司让我开发一个条形码的生成控件,花了半天时间搞定觉得不过瘾,什么年代了该用二维码了吧.于是wiki了一下二维码的资料. 比较常见的就是QR码( ...

  7. WPF 面试题及答案(二)

    一 · WPF中什么是样式? 首先明白WPF中样式属于资源中重要的一种. 同时样式也是属性值的集合,能被应用到一个合适的元素中,或者说能将一组属性应用到多个元素. WPF中样式可以设置任何依赖属性. ...

  8. WPF 绕圈进度条(二)

    一 以前的方案 以前写过一个圆点绕圈的进度条,根据参数圆点个数和参数每次旋转角度,主要是在cs文件中动态添加圆点,通过后台定时器,动态设置角度后用正弦余弦计算(x,y)的位置. 此方案优点:动态添加L ...

  9. WPF中动态添加xaml资源文件

    一.新建一个资源文件,然后设置其Build Actoin(生成操作)为Resource(资源): 二.在App.xaml.cs的StartUp事件或者是你需要的时机代码段写上如下代码: Resourc ...

随机推荐

  1. 当sql报错代码,不允许对表操作的原因

    不允许对表 表名 执行操作,原因码为 原因码. 说明 限制对表 表名 的访问.原因基于下列原因码 原因码: 1 该表处于“设置完整性暂挂无访问”状态.未强制表的完整性并且表的内容可能是无效的.如果从属 ...

  2. RequireJS入门(二) 转

    上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute.RequireJS使用define来定义模 ...

  3. 【转】ios开发之AppDelegate

    创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件.   AppDelegate为何物?  AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...

  4. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.2安装操作系统CentOS5.4

    2.2. 安装操作系统CentOS5.4 两个虚拟机都安装,此步骤在创建虚拟机节点时: 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境所有链接: 1.资源 ...

  5. POJ 2241 Mondriaan's Dream

    题意:给一块n×m的空地,用1×2的砖铺,有多少种方案. 解法:状压dp.考虑dp[i][j]表示前i - 1行都铺满时第i行的状态为j时的方案数.对于第i行,每个格子上是否有砖用0和1表示,0表示不 ...

  6. Struts2配置细节

    struts.xml中 action中配置 如果是返回到网页则 /AA/XX.jsp 如果是返回到action则看namespace然后传参数,如果是同一个namespace则直接写上返回的actio ...

  7. strcpy()的实现

    看到有一个博客讲的比平时理解的更深入,mark一下:strcpy函数的实现 这里只写平时理解的,三个要点: //strcpy自己实现 char *strcpy(char *dest, const ch ...

  8. 重新开始吧(ADB+AndroidManifest.xml)

    我现在默认已经搭建好了开发环境.如果没有,可以参见去Google一下,或者我上两篇文章中也有提到. 先补充一点: SDK不用FQ.也能更新 修改hosts文件 下载sdk版本: 在hosts文件中追加 ...

  9. (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...

  10. echart图表控件配置入门(二)常用图表数据动态绑定

    上一节 <echart图表控件配置入门(一)>介绍了echarts图表控件的入门配置,使开发人员可以快速搭建出一个静态的图表.但是在实际开发过程这还是不够的,不可能所有的图表控件都是静态数 ...