在一個silverlight工程裡加載另一個xap之前我已經有寫過,不過如果加載後互相調用就沒有寫到,是以補充說明一下加載後兩個silverlight中互相調用方法和元素的使用。
注意:請先參考本網站的《Silverlight3 加載其他xap》文章,再結合以下内容使用!
1.在主程式裡調用加載的xap裡的方法:
a.在被加載的silverlight裡添加一個方法提供給調用:
1: public void test()
2: {
3: MessageBox.Show("hello Man");
4: }
複制代碼
b.在主silverlight程式中調用上邊的方法:
1: Type t = element.GetType();
2: MethodInfo m = t.GetMethod("test");
3: m.Invoke(element,null);
這裡請注意
a)element是動态加載xpa後所得到的UIElement。(也就是被加載的silverlight,隻是加載後會以一個UIElement形式傳回)
b) t.GetMethod("test"),這裡的參數是被加載程式的方法名。
c)Invoke方法重點有于Null參數,如果被調用的方法是有參數的,我們就可以通過這個參數去傳遞。
2.在被加載程式中調用主程式的方法。
a.在主程式中定義一個相同的方法供加載程式調用:
1: public void dothing()
3: MessageBox.Show("haha");
b.在被調用程式中調用主的方法:
1: Type t = App.Current.RootVisual.GetType();
2: MethodInfo m = t.GetMethod("dothing");
3: m.Invoke(App.Current.RootVisual,null);
a) 這裡有興的是我們被加載後我們的App.Current不再是本程式的App.Current了。而是主程式的App.Current,而且 RootVisual就是我們的MainPage,大家可以參考app.xaml.cs檔案.由此我們可以對主程式為所欲為了。呵呵。
b)通過 t.GetMethod("dothing");調用主程式中的方法。方法名為"dothing".
c)m.Invoke調用方法并傳入null參數,即為無參方法。
3.如何調用有參數的方法:
a.假設要調用的方法的參數定義如下:
1: public void dothing(int i,string s,double d)
b.我們可以通過以下方法傳遞參數:
3: m.Invoke(App.Current.RootVisual,new object[3]{1,"string",2.2});
這裡請注意 m.Invoke的new object[3]{1,"string",2.2}這裡三個值對應的就是被調用方法的dothing(int i,string s,double d)三個參數。反之在主程式中調有和加裁程式使用方法相同。
4.如何取得xaml元素:
假設在被加載程式中在如上的xaml元素定義:
1:
5: mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
6:
7:
8:
9:
假設我們需要取得上邊所定義的button元素:
a.在此button所有在cs檔案上中定義一個方法。并且此方法的傳回是一個button:
1: public Button getButton()
3: return bt;
b.在主程式調用并取得元素:
2: MethodInfo m = t.GetMethod("getButton");
3: Button takeButton = (Button)m.Invoke(element,null);
如此即可取得被加載程式中的Button。
5.在被加載程式中調用主程式的自定議屬性:
a.在主程式中定義屬性:
1: private string haha;
2:
3: public string Haha
4: {
5: get { return haha; }
6: set { haha = value; }
7: }
b.利害GetProperties方法取得所有屬性:
2: PropertyInfo[] p = t.GetProperties();
3: var haha = p.First(h => h.Name.Equals("Haha"));
4: haha.GetSetMethod().Invoke(App.Current.RootVisual, new object[1] {"yoyo" });
結束語:
寫完這文章後有一個設想,可以通過這篇文章那寫的内容,開發一個sl的開發平台,讓使用者自己去開發sl項目。呵呵。。
REF:http://www.pin5i.com/showtopic-26082.html
本文轉自dotfun 51CTO部落格,原文連結:http://blog.51cto.com/dotfun/285190