實踐解決Silverlight問題經(jīng)驗分享
Silverlight為開發(fā)人員提供了一個強大的開發(fā)平臺,可以幫助開發(fā)人員開發(fā)出各種多媒體相關(guān)程序。不過在實際使用中,同樣也會出現(xiàn)一些不可避免的錯誤問題。下面我們就來一起分析一下有關(guān)Silverlight問題的相關(guān)解決方案。#t#
Silverlight問題1.namespace問題
一開始還不知道是這個問題,為什么我的XamlReader.Load出來的控件,我再FindName為什么找不到了?這個對我很關(guān)鍵,因為我所有的東西都是動態(tài)生成的,找不到了豈不是完蛋了,搜索啊搜索啊,發(fā)現(xiàn)做程序的還是得去國外論壇,隨著一番討論,終于找到了問題,namespace,不過為啥這樣,還是沒搞清楚,但是解決辦法找到了,很BT的一個方法
- string newxmlRoot = "< Canvas xmlns=
'http://schemas.microsoft.com/winfx/
2006/xaml/presentation'>" + str +
"< /Canvas>";- Canvas root = (Canvas)Xaml
Reader.Load(newxmlRoot);- UIElement realRoot = root.Children[0];
- root.Children.Remove(realRoot);
- _PageTurnCanvas.Children.Add(realRoot);
先生成一個,然后再移除掉,然后再添加,就不存在namespace問題了,findname也沒有任何問題了,很BT吧。
Silverlight問題2.WebRequest異步問題
在以前的版本,異步的程序中是可以訪問頁面控件的,但是beta2已經(jīng)和.net的線程一樣了,子線程是不允許訪問頁面元素的,而且使用主線程等待的方式System.Threading.ManualResetEvent也是不可以的,程序會死在主線程等待的地方。
那怎么辦呢?訪問完數(shù)據(jù)總要在界面上顯示出來瓦,因此,只好又想了一個比較猥瑣的方法,用一個storyboard解決了,在啟動異步的時候設(shè)一個bool變量為false,storyboard啟動,然后在storyboard completed事件中不停的檢測bool變量,如果還是false則storyboard繼續(xù)begin,子線程數(shù)據(jù)讀取完畢后,將bool變量置為true,storyboard completed事件中發(fā)現(xiàn)bool變量為true了,知道子線程數(shù)據(jù)讀取完畢,則storyboard stop,更新頁面元素,這樣就繼續(xù)可以使用WebRequest方法了,雖然效率犧牲了很多,但是還沒想出其它辦法前,只能現(xiàn)這么著了。
Silverlight問題3.屬性設(shè)置方面(列舉一些吧,比較多)
- StarImg5.SetValue(Canvas.Left
Property, Convert.ToDouble(52));- StarImg5.SetValue(Canvas.TopProperty,
Convert.ToDouble(0));- PointCollection _oddClipmyPoint
Collection = new PointCollection();- Point _oddClipPoint1 = new Point(0, p2y);
- Point _oddClipPoint2 = new Point(p3x, 0);
- this._oddClipRegionLineSegment1.
SetValue(LineSegment.Point
Property, _oddClipPoint1);- this._oddClipRegionLineSegment2.
SetValue(LineSegment.Point
Property, _oddClipPoint2);
其它Silverlight問題就不列舉了,屬性的檢查比以前嚴(yán)格了許多,強制要求變量的類型符合要求。