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

  以前写的一个东东,想用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. 【英语】Bingo口语笔记(8) - 爆破音的发音技巧

    轻读,有时候甚至是听不到的,就嘴巴碰一下而已.

  2. T-SQL备忘(4):分页

    set statistics io on set statistics time on --SQL Server 2012分页方式 select * from Production.Product o ...

  3. 一种Javascript解释ajax返回的json的好方法

    通常ajax请求返回的格式为json或者xml,如果返回的是json,则可以通过转换成javascript对象进行操作,如下: 1.ajax请求的controller实现 @RequestMappin ...

  4. std::sort引发的core

    #include <stdio.h> #include <vector> #include <algorithm> #include <new> str ...

  5. PHP如何返回json格式的数据

    我们常见一些网站在做ajax时返回JSON格式的数据: 返回的是json格式的数据 这有什么好处那?很显然前端在接到返回的数据时可以直接使用,而不用再用eval('(+ returnString +) ...

  6. Javascript兼容和CSS兼容总结

    javascript部分 1. document.form.item 问题问题:代码中存在 document.formName.item(“itemName”) 这样的语句,不能在FF下运行解决方法: ...

  7. 镜头覆盖范围FOV 的规划与FOV去四角

    本文纲要: 规划FOV的原因 FOV去四角 简单的声明 FOV查找思路 查找FOV的代码 TNoFourCornersRect结构及Contains函数 判断两个矩形是否相交 延伸与拓展 本文内容: ...

  8. ps做gif love教程(转)

    先看看效果吧: 这是在写部教程的时候,看到一个由方格组成的心.于是试着用PS做成了动画,然后加入了LOVE四个字母,看起来还可以.但是,有些复杂.复杂倒不是技术上的复杂,是做起来复杂. 来试试吧. 1 ...

  9. 前端技能汇总 Frontend Knowledge Structure

    Frontend Knowledge Structure 项目起源 还记得@jayli 的这幅前端知识结构图么. 图片的形式具有诸多的不便.缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有 ...

  10. jboss服务器配置多实例

    jboss配置多实例的重要性 在开发, 测试项目的过程中, 我们经常需要在同一台主机上, 同一个服务器上配置多个运行实例.这样做有一下几点好处: 在项目开发, 调试阶段能最大限度的节省资源 某个实例出 ...