實(shí)踐解決Silverlight問(wèn)題經(jīng)驗(yàn)分享
Silverlight為開(kāi)發(fā)人員提供了一個(gè)強(qiáng)大的開(kāi)發(fā)平臺(tái),可以幫助開(kāi)發(fā)人員開(kāi)發(fā)出各種多媒體相關(guān)程序。不過(guò)在實(shí)際使用中,同樣也會(huì)出現(xiàn)一些不可避免的錯(cuò)誤問(wèn)題。下面我們就來(lái)一起分析一下有關(guān)Silverlight問(wèn)題的相關(guān)解決方案。#t#
Silverlight問(wèn)題1.namespace問(wèn)題
一開(kāi)始還不知道是這個(gè)問(wèn)題,為什么我的XamlReader.Load出來(lái)的控件,我再FindName為什么找不到了?這個(gè)對(duì)我很關(guān)鍵,因?yàn)槲宜械臇|西都是動(dòng)態(tài)生成的,找不到了豈不是完蛋了,搜索啊搜索啊,發(fā)現(xiàn)做程序的還是得去國(guó)外論壇,隨著一番討論,終于找到了問(wèn)題,namespace,不過(guò)為啥這樣,還是沒(méi)搞清楚,但是解決辦法找到了,很BT的一個(gè)方法
- 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);
先生成一個(gè),然后再移除掉,然后再添加,就不存在namespace問(wèn)題了,findname也沒(méi)有任何問(wèn)題了,很BT吧。
Silverlight問(wèn)題2.WebRequest異步問(wèn)題
在以前的版本,異步的程序中是可以訪(fǎng)問(wèn)頁(yè)面控件的,但是beta2已經(jīng)和.net的線(xiàn)程一樣了,子線(xiàn)程是不允許訪(fǎng)問(wèn)頁(yè)面元素的,而且使用主線(xiàn)程等待的方式System.Threading.ManualResetEvent也是不可以的,程序會(huì)死在主線(xiàn)程等待的地方。
那怎么辦呢?訪(fǎng)問(wèn)完數(shù)據(jù)總要在界面上顯示出來(lái)瓦,因此,只好又想了一個(gè)比較猥瑣的方法,用一個(gè)storyboard解決了,在啟動(dòng)異步的時(shí)候設(shè)一個(gè)bool變量為false,storyboard啟動(dòng),然后在storyboard completed事件中不停的檢測(cè)bool變量,如果還是false則storyboard繼續(xù)begin,子線(xiàn)程數(shù)據(jù)讀取完畢后,將bool變量置為true,storyboard completed事件中發(fā)現(xiàn)bool變量為true了,知道子線(xiàn)程數(shù)據(jù)讀取完畢,則storyboard stop,更新頁(yè)面元素,這樣就繼續(xù)可以使用WebRequest方法了,雖然效率犧牲了很多,但是還沒(méi)想出其它辦法前,只能現(xiàn)這么著了。
Silverlight問(wèn)題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問(wèn)題就不列舉了,屬性的檢查比以前嚴(yán)格了許多,強(qiáng)制要求變量的類(lèi)型符合要求。




















