RSS 2.0 Feed
2007-05 Entries
摘要:【原文地址】 Tip/Trick: Supporting Full Screen Mode with Silverlight 【原文发表日期】 Thursday, May 17, 2007 6:56 AM Silverlight支持的一个很好的特性是全屏功能,它能有效地接管计算机的整个屏幕,把其他的一切都藏起来,包括浏览器的边框。这在创造沉浸性UI体验,游戏,丰富的视频播放器等时会非常有用。 想看一个该特性的很好的实战例子的话,一定要去看一下www.silverlight.net网站上的Fox电影例程: 在页面装载结束,电影开始播放后,在视频表面的中间双击,转换到全屏模式(注:上面的屏幕截图不是在全屏模式下,而是在浏览器模式下截下来的)。然后你可以点击ESC键来转回正常的浏览器模式。 如何使用.NET在Silverlight 1.1中实现全屏模式 我看到几个人问的一个问题是,“如何在使用.NET建造Silverlight应用时实现全屏模式? ” 好消息,答案是,实际上非常容易: 1) 首先往你的应用中加一个输入驱动的事件处理器,譬如,鼠标按下或键盘事件处理器。为安全之故,Silverlight不允许开发人员在应用刚装载时把应用转换成全屏模式(你不想让一个应用诓骗你)。所以你需要在回复用户动作时触发全屏模式。 2) 在你的输入事件处理器里,将BrowserHost.IsFullScreen属性设置为true (注: BrowserHost类居于System.Windows.Interop 空间命名之下)。这会引起Silverlight转换成全屏模式。将这个属性设置为false则转回到正常的浏览器模式。 简单的全屏模式样例 你可以在这里下载一个我用C#编写的简单的Silverlight全屏模式例程。 在你运行这个例程时,它会在浏览器里装载一个极其简单的Silverlight应用,显示一个文字消息,提示你点击它以转换成全屏模式: 如果你点击“Click for Full Screen(点击转换成全屏)”文字的话,该应用就会转换成全屏模式,即,把系统里运行的所有其它东西都隐藏起来,接管整个屏幕: 当你转换成全屏模式后,Silverlight会显示一个用户消息框,在屏幕上显示几秒钟,指示用户,他们可以按ESC键来转回浏览器模式。几秒钟后,这个消息框会消失,可见的只有你的内容。在我上面的例程里,我也允许用户点击“Click to Return to Browser(点击返回浏览器)”文字来转回浏览器模式。 简单的全屏模式代码解释 实现上面的例程的代码非常简单。 首先,我们可以打开和编辑应用的.XAML文件,然后往其中添加一个UI元素,我们将用它来触发全屏模式。在上面的例程里,我使用了一个<TextBlock>控件,我将它命名为"MyMessage"。下面是整个应用的XAML的所有内容: 下面的屏幕截图显示了上面.XAML文件的后台代码,包含了整个应用的所有代码: 在应用的Page_Loaded()事件处理器里,我接连了2个事件处理函数。 MyMessage_MouseLeftButtonDown,这个事件处理函数将会在用户点击我加进XAML文件中的TextBlock消息控件时执行。在这个事件处理函数里,我只是简单地根据当前是否已经在全屏模式,来把BrowserHost.IsFullScreen属性切换成true或false。 BrowserHost_FullScreenChange,这个事件处理函数会在Silverlight转换成全屏模式和浏览器模式时执行。它在模式转换发生时,提供了一个很好的地方来添加逻辑以更新UI。在上面的例程里,我改变了TextBlock控件上的文字。我也可以设置控件的大小或者将它们移动到屏幕的新位置上去。目前,Silverlight 1.1 Alpha还没有布局管理器支持,所以控件不会自动定位,除非你编写代码自己管理(不用担心,象桌面WPF版本一样的布局管理控件不久就会推出)。 除了IsFullScreen属性外,BrowserHost类还有许多非常有用的属性和事件: ActualHeight和ActualWidth属性在你转换成全屏模式查询屏幕尺寸时尤其有用。你可以在页面上定位和扩缩你的UI控件时利用这些属性。 结语 在Silverlight应用中支持全屏模式非常容易,它能提供了了非常棒的,沉浸性用户体验。 想进一步了解Silverlight的话,请阅读我的Silverlight综合公告贴子以及访问www.silverlight.net社区网站。 想观看我使用.NET和Visual Studio Orcas从头打造Silverlight应用的示范的话,请观看这里的这个录像。 希望本文对你有所帮助, Scott 标签: .NET, Tips and Tricks, WPF/E, WPF, Silverlight...[阅读全文]

posted @ | Feedback (14) | Filed Under [ .NET Tips and Tricks WPF/E WPF Silverlight ]

摘要:【原文地址】 New "Orcas" Language Feature: Anonymous Types 【原文发表日期】 Tuesday, May 15, 2007 7:02 AM 在过去的2个月里,我发表了一系列贴子,讨论作为Visual Studio和.NET框架Orcas版本一部分发布的一些新的语言特性。这里是这个系列里前4个贴子的链接: 自动属性,对象初始化器,和集合初始化器 扩展方法 Lambda表达式 查询句法 今天的贴子讨论我这个语言系列的最后一个新特性:匿名类型。 什么是匿名类型(Anonymous Types)? 匿名类型是C#和VB的方便语言特性,它允许开发人员在代码内简明地定义行内CLR类型,而不用显式地对类型定义一个正式的类声明。 匿名类型在使用LINQ做查询,转换/投影/构形数据时尤其有用。 匿名类型的例子 在我以前的查询句法贴子里,我示范了你可以通过投影来转换数据。这个LINQ的强有力的特性允许你对一个数据源(不管这个数据源是数据库,XML文件还是内存中的集合)做查询操作,然后对查询数据的结果构形成与原先数据源不同的结构或格式。 在我以前的查询句法贴子里,我定义了一个用来代表我转换过后的产品数据的MyProduct类。通过显式地定义MyProduct类,我就有了一个正式的CLR类型契约,我可以很容易地用它来把我自定义结构的产品结果在web服务间或我的应用解决方案中的多个类和程序集间传递。 但有的时候,我只想要在我当前的代码范围内查询和操作数据,我不想要另外正式地定义一个类来代表我的数据,才可以操作数据。在这种情形下,匿名类型非常有用,因为它们允许你在你的代码内,简明地定义一个新类型在行内使用。 例如,假设我使用Orcas中的LINQ到SQL对象关系映射器设计器对Northwind数据库建模,生成下列的类:   然后我就可以使用下列代码来对数据库里的产品数据进行查询,使用LINQ的投影/转换功能将数据结果定制构形成与上面的Product类有所不同的东西。但不是用一个显式定义的MyProduce类来代表从数据库获取的数据行,而是用匿名类型的特性来隐式地定义一个含4个属性的新类型来代表我定制构形的数据,象这样: 在上面的代码里,作为LINQ表达式select子句的一部分,我声明了一个匿名类型,然后由编译器自动生成带4个属性(Id, Name, UnitPrice 和 TotalRevenue)的匿名类型,这些属性的名称和类型是从查询的构形中推断出来的。 然后我使用了C#中的var这个新关键词来指代从LINQ表达式返回的这个匿名类型的 IEnumerable<T> 序列,还在后面代码的foreach语句里,对这个序列进行循环时,用var来指代其中的每个匿名类型实例。 尽管这个句法给了我动态语言一样的灵活性,我还保留了强类型语言的好处 - 包括 Visual Studio中的编译时检查和代码intellisense支持。例如,注意上面,我是如何对返回的产品序列做foreach的,对从LINQ查询推断出的带自定义属性的匿名类型,我还能得到完整的代码intellisense和编译检查。 理解var关键词 Orcas中的C#引进了var这个新关键词,在声明局部变量时可用于替代类型名。 在第一次看见var这个新关键词时,大家常有的一个错误认识是,这是个后期绑定或者无类型的变量引用(譬如,Object类型的引用或象Javascript中后期绑定的对象引用)。这并不正确,var关键词总是生成强类型的变量引用。不是要求开发人员显式地定义变量的类型,var这个关键词而是告诉编译器在变量最先声明时,从用来初始化变量的表达式推断出变量的类型。 var这个关键词可以用来引用C#的任何类型(意即它可用于匿名类型和显式定义的类型)。实际上,理解var这个关键词的最容易的方法是看一下几个将其用于常见显式类型的例子。譬如,我可以象下面这样使用var这个关键词来声明三个变量: 编译器会根据初始赋值推断出name,age和male变量的类型,在这个例子中,分别是字符串,整数和布尔值。这意味着,编译器会生成与下面代码完全一样的IL: 实际上,CLR根本不知道你使用了var这个关键词,从它的角度来看,上面2个代码例子绝对没有区别。第一个版本只不过是由编译器提供的节省开发人员几下键击的语法糖而已,让编译器做苦力推断出和声明类型名称。 除了使用var这个关键词替代内置的数据类型外,很明显地,你也可以将它用于你定义的任何自定义类型。例如,回到我以前博客贴子中的LINQ查询投影例子,这个投影使用了用来数据构形的显式的MyProduct类型,我可以用var这个关键词将其改写为: 重要注意事项:虽然我在上面使用了var这个关键词,我并没将其用于匿名类型。我的LINQ查询还是使用了MyProduct这个类型来对返回的数据做了构形,这意味着var products声明是IEnumerable<Product> products的速记而已。同样地,在foreach语句中我定义的var p变量不过是MyProduct p的速记而已。 var关键词的重要规则 因为var这个关键词产生强类型的变量声明,编译器需要能够根据它的用法推出其类型。这意味着,在用它来声明变量时,你总是需要做个初始赋值。编译器会产生一个编译错误,如果你不这么做的话: 声明匿名类型 至此,我们介绍了var这个关键词,我们可以开始用它来指代匿名类型了。 C#中的匿名类型是使用与我语言系列第一个博客贴子里讨论过的对象初始化句法同样的句法来定义的。其区别是,不是作为初始化语法的一部分来声明类型名称,而是在实例化匿名类型时,你将new关键词后面的类型名称省略掉: 编译器会分析上面的句法,自动定义一个带有4个属性的新的标准CLR类型。这4个属性的类型是根据赋给的初始值的类型来决定的。例如,在上面的例子中,Id属性被赋值了一个整数,所以编译器将生成一个类型为整数的属性。 匿名类型的实际CLR名称是由C#编译器自动生成的。CLR本身并不知道匿名类型和非匿名类型间的区别,所以两者的运行时语义是绝对完全一样的。Bart De......[阅读全文]

posted @ | Feedback (39) | Filed Under [ ASP.NET .NET LINQ Data ]

摘要:【原文地址】Silverlight【原文发表日期】 Monday, May 07, 2007 2:49 PM 上个星期一,我在拉斯维加斯的MIX大会上做了一个主题演讲,讨论了过去的一年里花费了我大部分时间的一个新项目:Silverlight。 Silverlight是个跨平台,跨浏览器的.NET插件,允许设计师和开发人员在浏览器中建造丰富的媒体体验和RIA应用。这个星期我们发布的预览版目前在Mac和Windows上支持Firefox, Safari 和 IE浏览器。 想感受一下使用Silverlight你都能建造哪类富浏览器应用的话,观看一下Metaliq的这个7分钟的“顶级香蕉(Top Banana)”视频编辑例程的录像: “顶级香蕉(Top Banana)”应用是用C#开发的,可以在任何安装了Silverlight的系统上跨平台运行。整个应用的下载大小(意即在用户输入该网站的地址时,所有的XAML和编译过的代码的大小)只有50KB左右。我们将在今夏晚些时候作为例程发布这个应用的源码版本。 我的主题演讲 你可以在这里观看我的整个主题演讲(注:目前这个录像只显示了讲义和演示,一个星期内他们将更新推出一个更完整的录像版本)。 我非常幸运有一些很重要的客户在台上和我一起展示用Silverlight开发的一些非常丰富的体验,他们包括,Netflix(展示了一个很棒的“按需电影(movie on demand)”录像服务,同时支持社会网络), CBS (展示了用户产生的录像支持), Metaliq (展示了上面这个视频编辑应用) 和MLB.com (展示了他们精妙的棒球大联盟的新在线体验)。 在主题演讲中,我们还展示了你可以使用一些新的Expression Studio产品(包括Design, Blend 和Media Encoder产品)来建造可交互的视频播放器体验。我还做了一些开发演示,包括使用Visual Studio建造一个新的Silverlight项目,以及使用 .NET中的新Ruby支持在一个动态语言控制台里迭代开发一个Silverlight应用(该控制台是完全使用IronPython开发的,是在Mac的Safari浏览器中Silverlight里运行的)。 Silverlight 1.0 这个夏天我们将推出Silverlight的第一个版本。它着重于促成丰富的媒体场景,下载大小在1.2MB左右。它包括下面一些特性: 内置的codec支持,能在浏览器里播放VC-1和WMV视频, MP3和WMA音频。尤其是VC-1 codec, 在把媒体融入web体验方面是个很大的一步,因为它支持播放高达720p(高清晰度)的高品质视频。这个codec格式跟所有的HD-DVD和蓝光DVD播放器支持的格式是一样的,为数于亿计的移动设备,XBOX 360,Windows Media Center和Windows Media Player所支持,这允许 一个人把内容编码一次,在所有这些设备+Silverlight中毫无修改即可使用。这允许你使用庞大的现有视频内容和丰富的编辑工具来生成可用于Silverlight的视频内容。 Silverlight支持渐进下载的功能,以及从任何web服务器播放媒体内容的能力。你可以将Silverlight指向任何含有视频/音频内容的URL,它就会下载这些内容,允许你在浏览器里播放这些内容。不需要特别的服务器软件,Silverlight可以与任何web服务器相合作(包括Linux上的Apache)。我们也将发布一些IIS模块,提供你可以在你的服务器上免费启用的有用的媒体控制和带宽控制特性。 Silverlight也可支持内置的媒体流广播(media streaming)。这允许你在后端使用一个象Windows Media Server这样的流广播服务器(streaming server),做视频/音频流广播(注:Windows Media Server是运行在Windows Server上的的免费产品)。流广播(Streaming)带来一些非常大的好处: 1) 它可以在用户在一个大的视频流里搜寻时改进用户的体验,2) 它可以极大地降低带宽的成本(大部分用户并不观看整个录像,所以在使用渐进下载时如果他们在视频结束之前离开的话,你就浪费了带宽)。 Silverlight允许你创造丰富的UI和动画效果,把矢量图像与HTML混合起来创造出引人入胜的内容体验。它支持一个Javascript编程模型来开发这些效果。一个好处是,它极大地简化了把这些体验集成进AJAX网页(因为你可以编写Javascript同时来更新HTML和XAML元素)。 Silverlight使得建造丰富的视频播放器交互体验极其容易。你可以把它的媒体能力与矢量图像支持混合起来创造你想要的任何类型的媒体播放体验。Silverlight包含了全屏的功能来创造一个完全沉浸的体验,以及直接在正播放的视频内容之上覆盖菜单/内容/控件/文字的能力(允许你促成DVD一样的体验)。Silverlight还提供了动态改变正在播放的视频的长宽的功能,而不要求视频流中止或重启。 你可以使用任何标准的文字编辑器来开发Silverlight应用,而不用特别的工具。微软也将通过Expression Studio配套产品发布针对Silverlight 1.0应用的支持,包括内容管理和视频编码的丰富的工具支持。你今天就可以在这里下载支持Silverlight的Expression Blend 和 Expression Media Encoder CTP预览版。 想进一步了解Silverlight 1.0的特性,以及如何开始开发针对Silverlight 1.0的体验的话,我强烈推荐你在这里观看最近发布到新www.silverlight.net社区网站上的一些精彩“How do I?”录像。 我也推荐你观看这些免费的MIX大会的分会场讲座,它们讨论了Silverlight 1.0和媒体场景:......[阅读全文]

posted @ | Feedback (17) | Filed Under [ ASP.NET .NET Visual Studio Community News Silverlight ]