【发布时间】:2012-08-29 22:07:57
【问题描述】:
我注意到 WPF 中有一个有趣的错误,我想知道是否其他人也看到了它,如果有,他们是如何解决的?
我有一个Window,里面有一个GroupBox,里面有一个TextBox。 GroupBox 上的 DataContext 设置为我程序中的一个对象,因此TextBox 上的绑定设置如下:
<TextBox Text="{Binding Directory_Data}" IsReadOnly="True"
Name="dataPath_TextBox" Grid.Column="0" Grid.Row="1"
Height="23" Margin="6,3,3,3"/>
在 Windows 7(我在其上开发)上,这可以正常工作,我什至没有理由再考虑 XAML 的那一行。然而,在 Windows XP(安装了 .NET4.0)上进行一些测试时,打开这个Window 导致整个程序崩溃,并出现以下错误:
EventType: clr20r3, system.invalidoperationexception.
我花了很长时间才完成代码,直到最终将其缩小到上面的 XAML 行。
将TextBox 更改为Label(并将Text 属性更改为Content)防止了此崩溃并且程序按计划运行;这似乎是一个TextBox 错误。
虽然可以将TextBox 切换为Label(考虑到在我的情况下无论如何都会是ReadOnly),但为了外观,我更喜欢TextBox。可能是我必须从后面的代码手动更新Text 属性。
无论如何,我主要只是想指出这个问题,以防其他人遇到类似的事情。任何关于为什么会这样的想法都将不胜感激。
【问题讨论】:
-
是否有更多关于错误的信息?像堆栈跟踪什么的?另外,您是否尝试过另一台基于 XP 的机器? (以确保它不仅仅是框架的损坏安装)
-
错误框中有一些数字;我不认为它们会很有意义,但如果你愿意,我可以添加它们?是的,我已经在两台机器上试过了。实际上是有人在一台 XP 机器上为我测试它发现了错误,此时我自己在另一台机器上尝试了它并设法复制它。
-
不,不幸的是,这些数字没有任何用处,至少对我而言。订阅
AppDomain.UnhandledException事件会触发吗?您可以通过这种方式收集更多信息。 msdn.microsoft.com/en-us/library/… -
你能否在调试器中打开 CLR 异常以在抛出此异常时获取堆栈跟踪?我想由于 XP 和 Win7 中 WPF 使用的不同渲染器,视图数据可能会以稍微不同的顺序初始化/绑定。
-
嗨,Gaz,我不能执行 CLR 异常,因为 XP PC 没有 Visual Studio,所以我不能在调试器中运行程序。但是,AppDomain.UnhandledException 解决了这个问题......它表明“A TwoWay 或 OneWayToSource”绑定不能在只读文本框上工作,因此将其更改为 OneWay 可以解决问题。有趣的是,这个问题只出现在 Windows 7 而不是 XP 上。我希望我以前知道这个事件,它会为我节省很多时间!谢谢 KooKiz!
标签: .net wpf windows-7 windows-xp