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

  以前写的一个东东,想用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. 【转】eclipse怎么设置字体大小

    原文网址:http://jingyan.baidu.com/article/f96699bb9442f3894e3c1b15.html 1. 打开eclipse,找到window 2.  点击后在下拉 ...

  2. 本地Git环境配置

    在Git Bash下获取源码时,提示permission denied publickey. 原因是本地帐号配置不正确,解决办法 生成SSH文件 1,进入Git Bash 2,  输入下面文字 ssh ...

  3. 使用 foreach 操作数组

    foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach 更简单便捷.从英文字面意思理解 foreach 也就是“ for 每一个”的意思,那 ...

  4. Yii入门,登录

    验证和授权在页面需要限制访问时用到.验证就是确认某人就是他所声称的那个人.通常涉及到用户名和密码,但也包含其他方式,例如智能卡,指纹等.授权是在验证用户后,查明他是否被允许管理指定的资源.通常判断他是 ...

  5. c#枚举自定义,用于数据绑定。 z

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...

  6. HighChart 实现从后台取数据来实时更新柱状和折线组图

    前段时间公司让弄图表,给我说有HighCharts这个js插件,于是上网上搜,由于本人是写后端的,对于JavaScript和jQuery不是很熟悉,虽然找到了模板,但是还是不明白,所以一点一点的改,但 ...

  7. 关于python中字典的一些总结

    1. 获取字典中的值,但是无异常 当在字典中取值的时候,可以使用如下两种方式: >>> d = {'name':'kel'} >>> d {'name': 'kel ...

  8. Windows Azure 设置虚拟机静态外网IP地址

    官方说法叫做“虚拟公共IP地址保留”,为容易理解,我们称之为静态外网IP地址. 如果在国内使用国际版Windows Azure服务时强烈推荐为虚拟机设置IP地址保留. 由于Windows Azure ...

  9. [POJ] #1003# Hangover : 浮点数运算

    一. 题目 Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 116593   Accepted: 56886 ...

  10. 【JSON】JSON字符串的操作(不断积累中)

    一.JS遍历JSON串 示例01 目标:返回的JSON串中,一个Key对应的Value是一个数组(若在Java程序中,是一个List). 现在要求获取每个数组中的第一个对象元素中的name属性的值. ...