如何在Silverlight应用程序中包含System.Windows.Controls的特定控件?

时间:2009-09-01 15:25:37

标签: silverlight silverlight-3.0 assemblies silverlight-2.0

Microsoft可以方便地参考System.Windows.Controls namespace and which controls are included in the runtime中的各种控件。

对于此处列出的未包含在运行时中的任何控件,您必须包含对System.Windows.Controls程序集的引用,并在Visual Studio中选择“copy local”。这就是我目前正在做的事情并且它有效。

但是,通过包含此DLL,我将几乎80 KB添加到我的XAP文件中(我的XAP文件只有110 KB)。我正在使用的唯一控件是GridSplitter。有没有办法重建包含GridSplitter的此程序集的精简版本?

1 个答案:

答案 0 :(得分:2)

看起来我刚刚找到了Silverlight 2的答案......

Source Code for Silverlight 2 Runtime and SDK Controls

我认为现在对我有用。我应该能够完成项目并从项目中排除所有不必要的位并进行重建。

我仍在使用Silverlight 2,但我会在几个月内切换到3。我似乎无法为Silverlight 3找到相同的东西。也许Silverlight 3尚未提供源代码?

更新:

所以我在跳过一些篮球后得到了这个工作。起初我从微软下载了源项目,然后开始删除东西。但后来我注意到我无法构建解决方案。事实上,我也无法构建解决方案的未修改版本。我在强名称验证方面遇到了错误。我尝试从项目属性的“签名”部分取消选中强名称签名但我得到了同样的错误。我甚至将程序集添加到强名称验证跳过列表中,最后得出错误。但是当我尝试将新程序集包含在我的Silverlight项目中并在浏览器中运行时,我会得到一个空白屏幕(Silverlight控件从未加载)。我仍然不确定为什么,但我确定我错过了什么。

最后我刚刚创建了一个新项目。看来我应该从一开始就做到这一点。我只需要为GridSplitter创建一个空的C#Silverlight类库。然后我开始将GridSplitter所需的源文件添加到此项目中,然后将命名空间和程序集名称设置为System.Windows.Controls。在构建这个项目之后,在我的Silverlight应用程序中引用它,它终于奏效了。结果:节省了60 KB。

我在这里写了更多关于此的内容:

http://regexhero.net/blog/2009/09/optimizing-silverlight-xap-file.html

如果有人想要它们,我这里有4个来自SDK的控件......

http://www.silverlightxap.com/controls/tagged/silverlight-sdk