使用WPF创建个Digg桌面应用 这 最后个教程目和前面7个有点区别我们实际上不将在本教程里在Silverlight中运行代码而是将使用WPF和.NET 3.5我们将拿我们编写在浏览器中运行于Silverlight中现有Digg应用代码重用它来以Windows桌面应用方式运行
随Silverlight发布是套和.NET 框架完整版本相兼容API子集这么做目就是允许开发人员学习个共同编程模型和工具集能够在RIA web应用丰富Windows桌面应用和Office解决方案的间重用学到技能代码和内容
下面是我采取步骤来重用我们现有Digg Silverlight应用代码(运行于浏览器中)来建造个Windows桌面应用版本(运行于浏览器外)
第步:创建个新WPF桌面应用 我们先开始使用VS 2008创建个新WPF桌面应用我们将的命名为“DiggDesktopSample”:
这会在VS中创建个项目内含2个文件个App.xaml个 Window.xaml:
注意这个项目结构和我们在本系列教程第篇里创建Silverlight应用结构非常类似(拥有个App.xaml 文件个 Page.xaml 文件)
第 2步:把现有Digg应用代码拷贝进WPF应用中 我们将把现有DiggApplication Silverlight代码拷贝/粘贴进我们新DiggDesktopSample Windows项目中:
目前在Beta1版本中这个拷贝/粘贴是个手工步骤我们最终将有个自动化方式来在区别项目类型间移动代码
第 3步:修正几个问题 我需要做2个改动才能使我们现有Digg例程代码被成功编译:
1) Silverlight Beta1 XAML定义命名空间 xmlns:URL和完整WPF桌面版本区别我需要改动我拷贝进新项目XAML文件指向完整WPF定义这是在发布前我们还正在研究东西
2) 我需要把<<WaterMarkTextBox>Control控件改成<TextBox>把 <HyperlinkButton> Control控件改成<TextBlock>这2个Control控件是Silverlight Beta1 版本中新有不存在于完整WPF版本中(但我们会在将来添加它们)但我不用改动跟这些Control控件相关任何代码也不用改动网络LINQ to XML, 或数据绑定代码
做完这些小改动后项目就可以干净地编译了
第 4步:把Digg应用宿主和桌面窗口中 然后我打开桌面项目中Windows1.xaml 文件(它是在应用启动时装载默认窗口)
我把窗体标题改成“Digg Desktop Version”扩大了窗口默认宽度和高度
然 后我把来自前面Digg Silverlight 项目中Page.xaml 用户Control控件加到窗口中作为根Control控件这在窗口装载时会载入该Control控件并使的可见我不用改动Page类代码或者对其中东西改名是从 UserControl继承而来它是完全可以宿主于任何WPF窗口或Control控件中
我 改动最后样东西是Digg REST API 服务器会试着检测是否是非浏览器/服务器在访问它有时会在这些情形下给予个拒绝访问回复(大概是防止自动脚本访问他们服务)而导致个问题我 通过让网络访问经过个代理URL解决了这个问题(没有代码变动只是URL改动)
第 5步: 运行应用 然后我能够运行我们新DIgg桌面应用所有功能都跟Silverlight版本样工作应用行为也完全样:
在从列表中选择个故事后细节用户Control控件显示为:
浏 览器版本和桌面版本间有几个细微样式区别这主要是WPF在默认情形下继承了基于当前用户选择操作系统主题默认样式(字体颜色卷动条等 等)而Silverlight 则有个我们在所有操作系统上都使用默认主题如果我们要使得桌面版本和浏览器版本绝对致我们可以在我们样式和Control控件模板中更明确地指定否则 话桌面版本会基于用户OS主题做稍微变动
结语 我们会在将来推出在Silverlight和WPF项目的间共享代码更详细注意事项和推荐 最佳实战指南我认为你会发现你在建造Silverlight应用时学到技能和知识可以很好地转移到完整WPF项目中去我们也致力于个非常高 兼容水平能在解决方案间促进好代码重用促进Control控件内容和代码轻松共享和利用
希望本文对你有所帮助!
出处:http://blog.joycode.com/scottgu/
【原文地址】Silverlight Tutorial Part 8: Creating a Digg Desktop Application using WPF
最新评论