前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP、WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常。很明显,这不是后台的代码出的错。当时情况很艰苦,用户在十万八千里之外,他的电脑上也没有调试环境,我只能在本地一步一步排除错误可能,修改、打包、发布到用户、卸载、重装、足足折腾了一天,最后总算是搞定了。

  不知道大牛们遇到这样的情况怎么处理。没有调试环境,本地运行良好,用户运行就闪退,没有任何错误抛出。大家先思考一番,你遇到这样的情况,你会如何处理。

  我比较笨,第一步,把这个控件关联的后台代码注释,排除后台代码的出错可能。

  第二步,既然不是后台代码的问题,那就是这个控件的问题了,这是个CheckBox,引用到一个写好的资源Style,由于不能到用户那里调试,本地也完好运行,那我就在窗体的Loaded里找这个资源,代码赋给这个控件。果然,本地报了一个“{DependencyProperty.UnsetValue}”不是属性“BorderBrush”的有效值的错误,心中窃喜,一看BorderBrush后面赋值的资源,在那个资源文件里找不到,放在了App.xaml里,那也行,那就把它弄过来,放到Style同文件里,本地运行,Ok,发布给用户,继续闪退。

  第三步,现在十有八九是这个Style的问题了,是什么问题呢?每次我只要一点击这个CheckBox就闪退,那我就到Style里看看,点击时会有一个向右下平移的TranslateTransform执行了,难道是它?不管,删了再说,发布,继续闪退。再看,Checked为True和False的时候操作了一个Path,难道是这里有问题?继续删,继续闪退。

  到这我就有点抓狂了,好吧,既然这个Style有问题,不用你可以吧,把引用Style的语句移掉,OK了。

  虽然是正常运行了,但是问题的根本没有解决,由于使用默认的风格影响了用户的使用,必须使用自定义Style。那好吧,不用那个有问题的Style,用Win7的,直接复制副本到资源文件里,还是闪退。

  我开始怀疑是不是系统有问题,用360修复了,问题依旧。

  Google,百度,好像没有人有我这样的遭遇,我开始同情自己了。

  蓦然回首,发现在不远处有台闲置的电脑,是部门的服务器,一般没人用,这让我看到了希望,远程到这台电脑,它是WindowsServer2003,上面也没有VS2010,但是毕竟是局域网,直接debug文件夹拷上去运行,一样闪退。

  难道是混在资源文件里会出错?好吧,单独给你弄个资源文件,继续闪退。

  没辙了,这个Style到底哪里出了问题,不能老这样闪退啊,好歹给我报个错,要哭了...已经没有什么我能做的了。

  这时候我在想,是不是这个资源要用到App.xaml里的资源,运行时引用不到?好歹是个机会,于是把App里的资源全部移到Merged的资源里,发布用户,运行OK,原来正是如此!

  总结:Wpf程序操作控件闪退,一般是由于资源引起的,如Style里的资源名找不到,写在分资源文件里需要引用到App.xaml里的资源等等,这时候要做的就是整合资源,App里面的资源全部整合到各自的资源文件里。如下:

  <Application.Resources>

    <ResourceDictionary>

             <ResourceDictionary.MergedDictionaries>

               <ResourceDictionary Source="SimpleStyles.xaml"/>

            <ResourceDictionary Source="SpecalStyles.xaml"/>

            <ResourceDictionary Source="WindowStyles.xaml"/>

              </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>

  </Application.Resources>  

  建议:在程序架构刚刚搭建的时候就注意资源的分流,不要全挤在App.xaml里,App.xaml只作Merged,不是必须不在App.xaml里写任何资源,新手可以那样做,老手千万不要贻笑大方啊。

WPF让人哭笑不得的资源的更多相关文章

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

    再吐槽一下(我已经无力吐槽).今天又被资源搞了一天,发现了一个秘密.大家想听就跟随我... 以前写的一个东东,想用mvvm重新实现一下,由于之前的写得很乱,App.xaml里一坨一坨的,就把资源整到一 ...

  2. WPF让人哭笑不得的BUG

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

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

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

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

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

  5. 国外AI界牛人主页 及资源链接

    感觉 好博客要收集,还是贴在自己空间里难忘!!! 原文链接:http://blog.csdn.net/hitwengqi/article/details/7907366 http://people.c ...

  6. WPF入门(4)——资源

    引用<深入浅出WPF>对资源的解读: 每个WPF的界面元素都具有一个名为Resources的属性,这个属性继承自FrameworkElement类,其类型为ResourceDictiona ...

  7. 使用WPF实现的 喜马拉雅FM 资源下载工具

    因为喜马拉雅pc网站上没有提供下载功能,之前有个同事问我有没有办法将资源下载到本地,当然通过浏览器F12也能找到下载地址,但挺麻烦.正好最近想学wpf,周末在家也没事,于是对着百度撸了下代码.当然只能 ...

  8. WPF整理-跨程序集访问资源

    “Sometimes binary resources are defined in one assembly (typically a class library), but areneeded i ...

  9. wpf 在引用外部的资源字典

    启动的APP.xaml

随机推荐

  1. 【英语】Bingo口语笔记(59) - 穿着的表达

  2. hadoop的API对HDFS上的文件访问

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...

  3. Android 一步步教你从ActionBar迁移到ToolBar

    谷歌的材料设计也发布了有一段时间了,包括官方的support库 相信大家也熟悉了不少,今天就把actionbar 迁移到toolbar的 经验发出来. 这个地方要注意 我用的图标都是studio里的一 ...

  4. 微信支付-JSAPI支付V3-查询退款

    接口地址 接口链接:https://api.mch.weixin.qq.com/pay/refundquery 是否需要证书 不需要. 请求参数 字段名 变量名 必填 类型 示例值 描述 公众账号ID ...

  5. GitHub入门:如何上传与下载工程?

    由于经常要在家写代码,所以需要有个能够方便访问代码管理工具.最近尝试了一下GitHub.经过了一翻纠结之后,基本上掌握了他的使用方式.  要使用GitHub需要首先在其网站上进行注册.其官方网站是ht ...

  6. CMDB反思4

    CMDB模型设计2 http://blog.vsharing.com/xqscool/A1275233.html 估计大家看到破子的这两篇都有点晕哈,我也有点晕. 两篇对比来看.   第1处,属性部分 ...

  7. C#开源框架(整理)

    http://www.cnblogs.com/chinanetwind/p/3715809.html http://www.cnblogs.com/chinanetwind/p/3715813.htm ...

  8. linux系统中内存爆满之后会如何?

    在使用python写程序的时候,发现一个可以无限迭代的迭代器,从而可以直接将系统中的内存占满,那么占满之后会发生什么呢? 1. 创建无限迭代,生成列表,如下: [root@python ~]# pyt ...

  9. spring依赖注入原理剖析

    PropertyDefinition.java package junit.test; public class PropertyDefinition { private String name; p ...

  10. manacher算法_求最长回文子串长度

    很好的总结,转自: http://blog.csdn.net/dyx404514/article/details/42061017 总结为:两大情况,三小情况. 两大情况:I. i <= p 1 ...