终结解密XAML开发—vs设计视图为什么显示不出来?
(该方法同样适用于调试blend附加进程到XDesProc)
平时大家在做XAML相关开发(wp7、silverlight、wpf)的时候会不会遇到vs设计视图显示不出来的问题呢?
每当遇到这样的问题,我们心里总是很烦,心想:我擦,本来可以改动下就可以立刻看到效果的,现在怎么成这样了?!怎么看不到了?!
如果团队开发心理一定暗骂~是谁!是谁!搞成这样了!
像这样:
往往会这样解决
1.用blend编辑xaml,在vs显示不出来,blend里面正常。
2.改动不大懒的开blend,在vs盲改两下运行起来看效果,然后看到不满意再停下程序
盲改两下,往往项目大了运行的过程会花费很多多余的时间。
然后忍气吞声 凑凑呼呼的直到项目做完………………
原因:
出现这种问题一般是因为界面绑定的vmodel里面的数据取不到,绑定的目标内部有计算错误,或者xaml有样式错误。
这些错误可能不影响程序的运行,然后大多数开发人员就不太关心,一心往下写代码,实际上这类错误放的越久
不容易查找还影响我们的工作效率。比如某个xaml页面一进去就crash掉了。运气好的给你提示个错误位置,运气不好的~擦,
完全告诉你哪出的错,你就苦逼的一点一点锁定错误目标范围吧。
还有为什么那些数据在运行起来就有了呢,
为什么在设计的时候没有数据?
举个例子 比如你绑定的数据需要从数据库取出来,运行程序比然有取数据的逻辑代码,当界面显示出来之前
你已经走完了这套逻辑并取出了数据。
那么设计视图里面绑定的时候要显示前不会启动你的代码逻辑所以它只能报错了。
解决方案:
怎么样可以快速的查找出设计视图不显示的问题呢,看,出杀手锏了
在已打开你的项目情况下,再打开同样的一个项目,
就是打开两个你要开发的项目……
用第二个vs 按快捷键ctrl+alt +p 呼出attach to process窗口
附加到你ide的devenv.exe进程上 点attach
这时候调试已经开始,接下来回到设计视图
点击click here to reload the designer
现在如果不出意外的话已经报错了~
看看你的代码那里出了问题。如果是xaml错误改掉就OK了
如果是数据问题加上一个判断:
bool designTime = (bool)DesignerProperties.IsInDesignModeProperty.GetMetadata(
typeof(DependencyObject)).DefaultValue
判断一下当前是不是设计模式如果是给他个假数据。
改好再看看!久违的设计界面出来了~~以后可以随时随地看设计视图!!
撒花~~~
参考:
http://blogs.msdn.com/b/kirillosenkov/archive/2008/12/07/how-to-debug-crashes-and-hangs.aspx
http://www.codeproject.com/Tips/61862/Detect-Design-Time-Mode-in-Silverlight
http://www.codeproject.com/Tips/590634/Designer-Debugging-in-WinRT