Windows Phone 7(WP7)开发 PhoneTextBox的一个BUG需要注意
作为Toolkit的控件之一的PhoneTextBox控件是我非常喜欢用的一个小东西,原因很简单,它自带一个默认的提示,当用户没有输入即Text的值为String.Empty的时候,这个提示就会出现,而且颜色还很浅,而当用户输入任何内容之后,提示就会隐藏,这种操作方式很适合放在手机这种屏幕不大的设备上,很省地方,比那种一个TextBlock加一个TextBox的方式明显舒服很多。
但是前两天测试发现一个问题,应用中有一个PhoneTextBox用来显示用户的地理位置,在GPS工作正常的情况下,它的Text值默认绑定成为GPS获取坐标之后解析出来的地址,而如果GPS工作不正常的时候,Hint的值显示“GPS异常,请手动输入您当前的地址”。这样的设置再正常不过了,不是么。
但是问题出现啦,具体复现:在启动应用程序之前,在手机的设置里把GPS关闭,启动应用程序,PhoneTextBox正常提示“GPS异常,请手动输入您当前的地址”,按开始键返回主页面,再进入手机设置开启GPS,然后不断的按后退键返回刚才的应用程序,我的GPS数据获取是在Loaded事件里有一次,之后就只能手动按钮刷新了,显然此时GPS没有再次自动刷新,然后我进入有手动按钮刷新的那个页面(和PhoneTextBox不在同一个页面),手动刷新GPS坐标,GPS坐标和位置解析正常之后,按后退键返回有PhoneTextBox的那个主页面,这个时候,问题出现啦:Hint提示的字符串和Text显示的地理位置共同出现在了PhoneTextBox里,两个字符串交叠在这里,异常难受。
这是一个BUG,简单分析是由于把PhoneTextBox的Text值进行了双向绑定,在另一个页面里刷新GPS数据之后,PhoneTextBox的Text值相应的发生了改变,但由于PhoneTextBox这个页面并未处于激活状态,所以PhoneTextBox的Hint的显示没有消失。
发现这个问题之后,我试图手动监测PhoneTextBox的Text变化然后控制Hint的隐藏,但是发现这不是一个好办法。后来,干脆把GPS获取的默认的地理位置也绑定到了Hint里,并做了一个Converter如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class NowAddressConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string result = value.ToString(); if (result == "" ) { return "GPS异常,请手动输入您当前的地址" ; } else { string str = @"当前地址:" ; if (value.ToString().StartsWith(str)) result = value.ToString(); else { result = str + value; } } return result; } public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return "" ; } } |
这样就把GPS的数据和默认的提示都放在了Hint属性里,从而绕过了上面提到的那个Bug,这只能算是一个临时的解决办法吧。
(备注:我目前使用的Toolkit是2011.11月的最新版本,由NuGet下载)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂