Windows Phone 7(WP7)開發 PhoneTextBox的一個BUG需要注意

來源:互聯網
上載者:User

作為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如下:

 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下載)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.