SilverLight之路知识点补充

来源:转载

回顾一下,已经写了一十六篇了,基本上前段时间学习到的东西都写到了,这一篇做一个目录贴吧;哦对了,还有几个知识点我也补充在这里吧

知识点补充

问题一:

(资源!又是资源!!!)今天一天又被一个资源问题浪费掉了,场景是这样的:在主xap中通过webclient异步加载xap中的控件,最初,问题是自定义样式没起作用,发现样式与主程序集中的一样,所以怀疑是

因为异步加载时,并没有载入资源字典(是资源字典,不是一般的资源文件),因为xap中只有一个dll文件(AppManifest除外),因此肯定是要从加载的dll中分离资源的,于是找资料,最像的一种是

ResourceDictionary rd = new ResourceDictionary();

rd.Source = new Uri("/FundAnalysis;component/FA_RD.xaml");

Application.Current.Resources.MergedDictionaries.Add(rd);

结果报错,说Uri找不到,难道是这种方法不行?于是又想,既然已经得到了Assembly,是不是应该从此入手呢,后来证明,这个思路浪费了大部分时间,一天过去了,一无所获,就在快绝望时,Uri的第二个参数

引起了注意,一试,果然如此rd.Source = new Uri("/FundAnalysis;component/FA_RD.xaml", UriKind.RelativeOrAbsolute);解决问题,我RI。。。。

于是重新修改资源字典,把测试的全部删除,重新建立,重新正规命名,得,错误又来了。。。

UIElement element = assembly.CreateInstance("FundAnalysis.MainPage") as UIElement;这一句报错,这可是构造函数啊,怎么会错呢?刚刚运行还是正常的呢?以为是ms的bug(不好意思,冤枉你了)

反复删除重建,都不行,又折腾了好久,原来是因为在控件中使用了StaticResource LeftNavButton样式定义,因为加载的dll时资源字典里还有没有一项,所以它才报错。那为什么开始时又是好的呢?原来是因为主

程序集中有默认资源的定义,所以它才会出现开始时的情况,即样式与主程序集中的一样,知道这些之后,改动就很好处理了

Assembly assembly = GetAssemblyFromXap(e.Result, "FundAnalysis.dll");

ResourceDictionary rd = new ResourceDictionary();

rd.Source = new Uri("/FundAnalysis;component/FA_RD.xaml", UriKind.RelativeOrAbsolute);

Application.Current.Resources.MergedDictionaries.Add(rd);

UIElement element = assembly.CreateInstance("FundAnalysis.MainPage") as UIElement;

this.CanvasMainPanel.Children.Add(element);

先加载dll,再合并资源字典,然后再创建控件,搞定。。。

问题二:

动态加载控件时,使用Canvas不能自适应大小,后改为Border就可以了

问题三:

datagrid 的 DataGridTextColumn 不能进行style,foreground等属性的绑定,只有使用DataGridTemplateColumn才可以

问题四

使用toolkit:Accordion控件时,填加的toolkit:AccordionItem没有header与content属性,是因为项目中未加载需要的程序集,如System.Windows.Controls,System.Windows.Controls.Tookies

问题十五

如果想把WCF服务引用放到一个项目中,其它项目直接引用该项目,那所有调用项目中也要引用System.ServiceModel程序集

本文来自第八颗流星的博客,原文地址:http://www.cnblogs.com/meteortent/archive/2011/07/01/2094842.html

分享给朋友:
您可能感兴趣的文章:
随机阅读: