关于wpf的一个bug,大家帮忙看下是不微软的问题

问题描述

一个很神奇的bug,稍后上一段我的测试代码,先说症状.这个现象并非在所有系统上出现,但win7,xp都有可能,也可能都没问题(这不废话嘛),我本机通过mstsc用同样的操作去测试故障机,就不会出现这个bug(同样的账户登录),但是那个故障机关于这个bug是必现的.代码如下,大家也可以拿回去测试下<GridName="maingrid1"><Border><ButtonHeight="23"HorizontalAlignment="Left"Margin="156,108,0,0"Name="button1"VerticalAlignment="Top"Width="75"Click="Button_Click"><PopupName="pop"IsOpen="False"StaysOpen="False"Height="79"Width="53"><ButtonHeight="50"Width="50"Content="111"Click="Button_Click_1"><Button.ToolTip><TextBlock>123</TextBlock></Button.ToolTip></Button></Popup></Button></Border><TextBoxMargin="239,69,7,14"></TextBox></Grid>privatevoidButton_Click(objectsender,RoutedEventArgse){pop.IsOpen=true;}privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}具体操作如下:点击button,鼠标滑过弹出的button,tooltip展示,鼠标点击文本框,如此多重复几次

解决方案

解决方案二:
这是异常信息
解决方案三:
win7,xp都有可能,那么win8、win10是否也有呢?微软已经放弃对xp的维护了,所以xp不应该在讨论之列出问题的win7的补丁打了多少呢?
解决方案四:
引用2楼xuzuning的回复:

win7,xp都有可能,那么win8、win10是否也有呢?微软已经放弃对xp的维护了,所以xp不应该在讨论之列出问题的win7的补丁打了多少呢?

并非所有xp都有这个问题,有的有,有的没有.关键是mstsc的时候这个问题就不出现了
解决方案五:
目测是代码问题。privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}这个事件中的Button为pop子控件,但是这个事件中处理的操作是关闭该控件的父控件,这就是导致事件没有执行完毕就出上图的错误。你可以在第一个button中写代码控制pop的显隐。
解决方案六:
引用4楼duanzi_peng的回复:

目测是代码问题。privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}这个事件中的Button为pop子控件,但是这个事件中处理的操作是关闭该控件的父控件,这就是导致事件没有执行完毕就出上图的错误。你可以在第一个button中写代码控制pop的显隐。

抱歉,这段代码可能有些误导性,其实你看下我的操作中并没有对第二个按钮进行任何操作,只是鼠标放在上头悬停一下,删了这个事件也无妨
解决方案七:
引用5楼zhou23141622的回复:

Quote: 引用4楼duanzi_peng的回复:
目测是代码问题。privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}这个事件中的Button为pop子控件,但是这个事件中处理的操作是关闭该控件的父控件,这就是导致事件没有执行完毕就出上图的错误。你可以在第一个button中写代码控制pop的显隐。

抱歉,这段代码可能有些误导性,其实你看下我的操作中并没有对第二个按钮进行任何操作,只是鼠标放在上头悬停一下,删了这个事件也无妨

那就是控件占用的问题了。例如就像一个在后台实例化的ListBoxItem对象,你可以把它添加到一个ListBox1中,但是就不能添加到另一个ListBox2中。WPF的逻辑子元素(逻辑树指的就是在xaml文件中声明的结构,可视树就是使用类似Snoop工具查看到的结构)是在xaml中就定义好的。不过看不出来你这段代码那个地方有什么不合适。
解决方案八:
Win7+VS2013+net4.5表示测不出你上面的问题。。。。
解决方案九:
引用7楼wyd1520的回复:

Win7+VS2013+net4.5表示测不出你上面的问题。。。。

你可以编译完拿到未安装vs的环境试下,我们的测试环境就是只装了4.0
解决方案十:
引用7楼wyd1520的回复:

Win7+VS2013+net4.5表示测不出你上面的问题。。。。

我的开发环境是win7x64+vs2010+4.0,编译目标是x86,故障机是win7/xp(x86)
解决方案十一:
引用6楼duanzi_peng的回复:

Quote: 引用5楼zhou23141622的回复:
Quote: 引用4楼duanzi_peng的回复:
目测是代码问题。privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}这个事件中的Button为pop子控件,但是这个事件中处理的操作是关闭该控件的父控件,这就是导致事件没有执行完毕就出上图的错误。你可以在第一个button中写代码控制pop的显隐。

抱歉,这段代码可能有些误导性,其实你看下我的操作中并没有对第二个按钮进行任何操作,只是鼠标放在上头悬停一下,删了这个事件也无妨

那就是控件占用的问题了。例如就像一个在后台实例化的ListBoxItem对象,你可以把它添加到一个ListBox1中,但是就不能添加到另一个ListBox2中。WPF的逻辑子元素(逻辑树指的就是在xaml文件中声明的结构,可视树就是使用类似Snoop工具查看到的结构)是在xaml中就定义好的。不过看不出来你这段代码那个地方有什么不合适。

感觉应该是那个tooltip的事情,第一次点击按钮弹出popup-鼠标悬停-展示tooltip-点击文本框-popup消失,第n(n>1)次点击按钮鼠标移动到popup里的button时就报错了.难道在某些环境下这个tooltip是个单例?第二次该展示的时候系统却认为它还是上一个popup里的tooltip,然后add的时候产生了上面的错?
解决方案十二:
引用10楼zhou23141622的回复:

Quote: 引用6楼duanzi_peng的回复:
Quote: 引用5楼zhou23141622的回复:
Quote: 引用4楼duanzi_peng的回复:
目测是代码问题。privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}这个事件中的Button为pop子控件,但是这个事件中处理的操作是关闭该控件的父控件,这就是导致事件没有执行完毕就出上图的错误。你可以在第一个button中写代码控制pop的显隐。

抱歉,这段代码可能有些误导性,其实你看下我的操作中并没有对第二个按钮进行任何操作,只是鼠标放在上头悬停一下,删了这个事件也无妨

那就是控件占用的问题了。例如就像一个在后台实例化的ListBoxItem对象,你可以把它添加到一个ListBox1中,但是就不能添加到另一个ListBox2中。WPF的逻辑子元素(逻辑树指的就是在xaml文件中声明的结构,可视树就是使用类似Snoop工具查看到的结构)是在xaml中就定义好的。不过看不出来你这段代码那个地方有什么不合适。

感觉应该是那个tooltip的事情,第一次点击按钮弹出popup-鼠标悬停-展示tooltip-点击文本框-popup消失,第n(n>1)次点击按钮鼠标移动到popup里的button时就报错了.难道在某些环境下这个tooltip是个单例?第二次该展示的时候系统却认为它还是上一个popup里的tooltip,然后add的时候产生了上面的错?

你别这样搞了,你把第一个Button与popup分开控制测试测试
解决方案十三:
引用11楼duanzi_peng的回复:

Quote: 引用10楼zhou23141622的回复:
Quote: 引用6楼duanzi_peng的回复:
Quote: 引用5楼zhou23141622的回复:
Quote: 引用4楼duanzi_peng的回复:
目测是代码问题。privatevoidButton_Click_1(objectsender,RoutedEventArgse){pop.IsOpen=false;}这个事件中的Button为pop子控件,但是这个事件中处理的操作是关闭该控件的父控件,这就是导致事件没有执行完毕就出上图的错误。你可以在第一个button中写代码控制pop的显隐。

抱歉,这段代码可能有些误导性,其实你看下我的操作中并没有对第二个按钮进行任何操作,只是鼠标放在上头悬停一下,删了这个事件也无妨

那就是控件占用的问题了。例如就像一个在后台实例化的ListBoxItem对象,你可以把它添加到一个ListBox1中,但是就不能添加到另一个ListBox2中。WPF的逻辑子元素(逻辑树指的就是在xaml文件中声明的结构,可视树就是使用类似Snoop工具查看到的结构)是在xaml中就定义好的。不过看不出来你这段代码那个地方有什么不合适。

感觉应该是那个tooltip的事情,第一次点击按钮弹出popup-鼠标悬停-展示tooltip-点击文本框-popup消失,第n(n>1)次点击按钮鼠标移动到popup里的button时就报错了.难道在某些环境下这个tooltip是个单例?第二次该展示的时候系统却认为它还是上一个popup里的tooltip,然后add的时候产生了上面的错?

你别这样搞了,你把第一个Button与popup分开控制测试测试

<Border><ButtonHeight="23"HorizontalAlignment="Left"Margin="156,108,0,0"Name="button1"VerticalAlignment="Top"Width="75"Click="Button_Click"></Button></Border><TextBoxMargin="239,69,7,14"></TextBox><PopupName="pop"IsOpen="False"StaysOpen="False"Height="79"Width="53"><ButtonHeight="50"Width="50"Content="111"Click="Button_Click_1"><Button.ToolTip><TextBlock>123</TextBlock></Button.ToolTip></Button></Popup>一样的
解决方案十四:
这篇文章说明了一般这种错误的原因,看来你要修改popup的Template了。
解决方案十五:
引用7楼wyd1520的回复:

Win7+VS2013+net4.5表示测不出你上面的问题。。。。

我刚刚在不报错的机子上测试了一下,其实如果仔细观察会发现,虽然程序没有报错,但是tooltip也没有被正确显示出来,所以我觉得微软可能真是挖了个大坑,这里的确会导致程序崩溃,但是在某些电脑上系统可能捕获到了这个错误,导致tooltip不显示了而已

时间: 2024-07-30 15:02:12

关于wpf的一个bug,大家帮忙看下是不微软的问题的相关文章

c++-初学C++ 一个小程序 求大神帮忙看下

问题描述 初学C++ 一个小程序 求大神帮忙看下 //分秒显示函数 #include using namespace std; //全局引用std命名空间 void showTime(int ,int); int main() { int hours =0 , mins = 0;//定义且初始化分 和秒 cout << "Input the hour "; cin >> hours; cout << "Input the mins &quo

各位大神帮忙看下一个JAVA多线程问题

问题描述 各位大神帮忙看下一个JAVA多线程问题 public class ttt { public static void main(String args[]) { account a=new account(); person person1=new person(); person person2=new person(); person1.cunkuanjine=1000; person2.cunkuanjine=2000; person1.zhanghu=a; person2.zha

spring mvc-我用springMVC写了一个web项目,加载到tomcat8上后启动出现此异常,请懂得的来帮忙看下

问题描述 我用springMVC写了一个web项目,加载到tomcat8上后启动出现此异常,请懂得的来帮忙看下 异常信息如下: 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring_mvc]] at or

android开发-android listview 数据显示bug,帮忙看一下?

问题描述 android listview 数据显示bug,帮忙看一下? 应用情景是这样的,点击底部选项卡,每个选项卡都会刷新listview,如果慢的点击一般不会出现异常,如果快速点击就会报异常,不知道什么原因,有的时候还会报这个异常:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImp

程序有错误-有一个错误,大家帮忙看下

问题描述 有一个错误,大家帮忙看下 include define PI 3.14 class shape { public: virtual float area()=0; virtual float girth()=0; }; class circle:public shape { public: circle(int a) { r=a; } float area() { s=PI*r*r; return s; } float girth() { c=2*r*PI; return c; } f

access-sql语句错误,帮忙看下问题在哪

问题描述 sql语句错误,帮忙看下问题在哪 update Chongzhi set JinE=(select JinE from Chongzhi where Id=12) where ID=1;access中 解决方案 http://www.jb51.net/article/53835.htm 解决方案二: (select JinE from Chongzhi where Id=12)的值单独发sql查出来,再作为参数传到update语句中 解决方案三: sql语句的错误 解决方案四: 我一般

c++11-请帮忙看下async_accept的这种调用方法,没有使用Bind,看不懂...

问题描述 请帮忙看下async_accept的这种调用方法,没有使用Bind,看不懂... void AsyncAcceptManaged(ManagerAcceptHandler mgrHandler) { _acceptor.async_accept(_socket, [this, mgrHandler](boost::system::error_code error) { if (!error) { try { _socket.non_blocking(true); mgrHandler(

vc6 0 extern 问题2个-vc6.0 中extern使用时遇到的2个疑问,还望诸位帮忙看下,多谢

问题描述 vc6.0 中extern使用时遇到的2个疑问,还望诸位帮忙看下,多谢 我在文件1CTestHello.cpp 声明了 extern void delete_string(char a[],char b[],char standard); 再调用文件2 file2.c中的delete_string(a,b,Standard);函数: 发现2个问题: 问题1:用extern实验发现必须用include,但查找资料,没有说这两个有必然关联.请问到底有没有必然关联?下面是实验: 如果文件1中

indows+蓝屏-Windows系统蓝屏,下面是bluescreanView和Windbg分析的结果,求高手帮忙看下~~谢谢

问题描述 Windows系统蓝屏,下面是bluescreanView和Windbg分析的结果,求高手帮忙看下~~谢谢 BlueScream分析结果: ==================================================** Dump File : 121814-18735-01.dmp Crash Time : 2014/12/18 7:19:00 Bug Check String : CRITICAL_OBJECT_TERMINATION Bug Check C