2008年8月20日星期三

silverlight

本文一直更新关注微软的Silverlight技术的最新介绍,希望可以让您有所用 ^_^
什么是 Silverlight?
  Silverlight (银光)是一种新的 Web 呈现技术,能在各种平台上运行。借助该技术,您将拥有内容丰富、视觉效果绚丽的交互式体验,而且,无论是在浏览器内、在多个设备上还是在桌面操作系统(如 Apple Macintosh)中,您都可以获得这种体验。Microsoft .NET Framework 3.0(Windows 编程基础结构)中的呈现技术 XAML(可扩展应用程序标记语言,发音:zammel)遵循 WPF (Windows Presentation Foundation),是 Silverlight 呈现功能的基础。
  使用 Microsoft 的众多工具(包括 Microsoft Expression Blend、Microsoft Visual Studio 2005 和 XAML)来构建内容丰富的图形站点。首先,让我们了解一下 Silverlight 发展历程的相关背景信息,以及它在开发领域所处的位置。
Web 开发的演变:转向 Web.Next
  CERN 的 Tim Berners-Lee 发明现代 Web 时,初衷是将其作为允许在基于网络的系统上存储和链接静态文档的系统。之后的数年间,随着创新的发展和成熟,“活动”文档自然而然地成为了现代 Web 发展的新阶段,这些文档在收到访问请求时即会生成,文档中包含特定于时间或用户的信息。CGI 之类的技术成为了这一阶段的实现基础。随着时间的推移,在 Web 上生成文档的功能变得极为重要,技术上的发展也历经 CGI、Java、ASP,到达 ASP.NET 阶段。
  在使开发人员拥有采用服务器开发模式并使用 Visual Studio 系列产品中的同类最佳工具快速开发高质量 Web 应用程序的能力这一方面,ASP.NET 树立了一个里程碑。
  事实证明,用户体验是 Web 应用程序中的一大障碍,在这方面,技术上的限制使 Web 应用程序无法提供与使用本地数据的客户端应用程序同样丰富的用户体验。
  XMLHttpRequest 对象(2000 年由 Microsoft 作为 Internet Explorer 5 的一部分发布)成为了异步 JavaScript 和 XML (AJAX) 技术的基础,该技术使 Web 应用程序能够更加动态地响应用户输入,因为采用该技术时只会刷新网页的一小部分,并不需要重新加载所有内容。基于 AJAX 构建的创新型解决方案(如 Windows Live Local 映射)使 Web 应用程序更进一步,已经能够提供与客户端类似的用户体验。
  Silverlight 是应用程序开发人员和设计人员可以向其客户呈现潜在用户体验丰富性的下一个发展阶段。为了实现此目的,它允许设计人员展现其创造力并以能够直接对 Web 产生影响的格式保存其工作。过去,设计人员会使用提供了丰富输出功能的工具来设计网站和用户体验,但在这些设计的实现能力方面,开发人员会受到 Web 平台的限制。在 Silverlight 模型中,设计人员可以构建所需的用户体验,并将其表示为 XAML。随后,开发人员可以使用 Silverlight 运行时直接将该 XAML 合并到网页中。因此,两者的合作可以比以往任何时候都更加紧密,从而提供丰富的客户端用户体验。
  由于 XAML 属于 XML,因此它是基于文本的,能够为这些丰富的内容提供与防火墙兼容的、易于检查的说明。尽管其他技术(如 Java 小程序、ActiveX 和 Flash)可用来部署比 DHTML/CSS/JavaScript 更丰富的内容,但它们都会向浏览器发送二进制内容。这就导致难以进行安全性审核,更不用说还有更新上的困难,因为进行任何更改后都必须重新安装整个应用程序,而这并不是友好的用户体验,并且可能导致页面停滞。如果使用 Silverlight,则需要更改丰富的内容时,服务器端会生成新的 XAML 文件。用户下次浏览到该页面时,会下载该 XAML 并更新体验,而不需要进行任何重新安装。
  Silverlight 的核心是浏览器增强模块,其作用是呈现 XAML 并在浏览器界面上绘制生成的图形。它的下载体积较小(不到 2 MB),可以在用户点击包含 Silverlight 内容的站点时进行安装。该模块向 JavaScript 开发人员公开 XAML 页面的底层框架,以便实现页面级的内容交互,这样,开发人员就可以进行自己的工作,例如编写事件处理程序或使用 JavaScript 代码来处理 XAML 页面内容。
  Silverlight 目前最新版本为2.0,使用Expression Blend 2.5版本和最新的VisualStudio silverlight tools开发。新功能包括:
1. 开发语言支持:VB.NET,C#,JavaScript,IronPython,IronRuby。2. 基于WPF的丰富的用户界面框架,包括:布局管理(<canvas>,<stackpanel>,<grid>,<panel>),数据邦定,样式(<style>),模板皮肤(templete,如<controltemplate>),以及强大的图像和动画引擎。除了以上这些,Silverlight 2还包含了其他更多的内置控件,包括:表单控件(<textbox>,<checkbox>,<radiobutton>),布局管理控件,常见的功能性控件(<slider>,<scrollviewer>,<calendar>,<datepicker>),数据操作控件(<datagrid>,<listbox>)等。3. 网络支持:REST,Web Service/SOAP,POX,RSS,标准HTTP服务,Socket网络支持,跨域访问支持。4. 包含丰富的.NET基础类库:集合,IO,泛型,线程,全球化,XML,本地存储,LINQ及LINQ to XML,本地数据缓存及存储,HTML DOM/JavaScript与.NET集成的API。
5.Silverlight 2.0的开发机智所有不同,相对于Silverlight1.1到2beta2版本的转变也很大,在Silverlight1.1中可以使用直接下载DLL文件与XAML运行。在2Beta2中自动进行了ZIP压缩打包,后缀更改为.xap(发音:Zap)。
因为目前Beta中,所以微软己经更正了很多显示问题。相信微软会给我们一个成熟的正式版本。

2008年8月5日星期二

Silverlight 视频播放器 源码

这段时间学习Silverlight
  我YoLing是个学者,YoLing在学习微软的播放器时总结出整理的资料,希望能给学习朋友们的提供学习!本资料只提供学习交流使用。

 浏览页面:http://slcenter.cn/show_36.aspx

 是微软官方视频网站中使用的Silverlight播放器,修正了无法在IFrame中运行的BUG,并且进行过滤和取其精华,让其它学者更轻松的得到要找的学习资料!

----------------------------------------------------------------------------
  这个播放器感觉非常不错,绚丽的控件动画和完善的代码机制。可以灵活的放在视频网站使用,并且可以使用.aspx服务器端直接输出asx播放列表。这样可以完善的实现上首一下首的功能了。并且在Silverlight中实得用了Silverlight 1.0开发,这样会兼容所有的客户端版本问题。

  在这个实例中,作者把CCTV2的MMS协议作为测试播放器的路径。效果不错~~


有什么不足,和看法不访提出。

来自:http://cnbody.com.cn/bbs/showtopic-100.aspx

2008年8月4日星期一

Silverlight音乐播放器

2008-08-05 09:27  Silverlight中多媒体使用了MediaElemtn控件实现,可以支持多种音频格式,包括Media player支持的解码格式“mp3,wma,wmv...”。由于Silverlight安装包大小关系,不支持网络常用的:“real ,flash vedio”编码格式。但是MediaElement支持普通和在线播放的等多种协议:
http
https
mms (You can use an mms URL but it will fall back to http.)
rtsp (You can use an rtsp URL but it will fall back to http.)
rstpt (You can use an rtspt URL but it will fall back to http.)
  这里推荐一个非常不错的音乐播放器源码,供大家参考:http://slcenter.cn/show_33.aspx

可以下载哟~

来自:http://hi.baidu.com/bobby96333/blog/item/7b16e65057c7ed648535245e.html

2008年2月22日星期五

XAML语法

XAML语法
日期:2008-2-22 作者:由灵

源文之:http://www.wpfhome.com/help/default.aspx?id=18

  XAML发音"zammel",以XML为标准格式。在XAML中您可以使用XML描述类的层次结构,可以使用Visual Studio和Expression等工具可视化编辑。其中命名空间、属性、实例对象、事件等,在XAML中进行了约束制定规则。可在Silverlight、XBAP、WPF Application等平台中使用XAML文件,所以见意您详细阅读本章。
<canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="1024" Height="768" x:Name="rootCanvas" Loaded="canvasLoaded">   图1
  一个XAML文件最终描述的是一个类,其中标签名Canvas是XAML文件描述的类继承的控件类名(如果不是默认命名空间,则必须的加上空间的前缀),同时Code中也继承此类。在浏览器中Silverlight作为一个控件的角色加载,所以此处中的Canvas也可以其它的控件比如:Panel,Control基类等。在XBAP中浏览器会把XAML作为页面执行,所以XBAP中的XAML应为Page派生类,在WPF Application中的XAML文件应是Application的派生类。其中属性Width和Height为面板的面积,Loaded为加载事件,其中Window和Height在属性获取时会转换为Int32类型,而Loaded会转换为canvasLoaded的委托。
命名空间
  在“图1”的XAML标记中,其中xmlns="http://schemas.microsoft.com/client/2007"是XAML文件中的默认命名空间,其中http://schemas.microsoft.com/client/2007代表的是一组.Net类库命名空间,包括:“System.Windows 和 System.Windows.Controls”等基本控件命名空间,是XAML处理器进行制定的,所以也会随版本不同而变化。 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",其中xmlns:x中的x可以随意用其它字母代替,实现命字空间的声明。在调用此命名空间的成员时使用x:成员名就可以。成员基本包括:“x:Array、x:Class、x:ClassModifier、x:Code、x:FieldModifier、x:Key、x:Name、x:Null、x:Shared、x:Static、x:Subclass、x:Type、x:TypeArguments、x:Uid、x:XData”,由XAML处理器的版本而升级变化。
  映射到自定义类和程序集
  语法使用下列可能的命名标记和值:
  clr-namespace: 在包含要作为元素公开的公共类型的程序集中声明的公共语言运行库 (CLR) 命名空间。
  assembly= 是指包含部分或全部引用的 CLR 命名空间的程序集。该值通常只是程序集的名称,而不是路径。该程序集的路径必须在生成编译的 XAML 的项目文件中以项目引用的形式建立。另外,为了合并版本管理和强名称签名,该值也可以是 AssemblyName 定义的字符串。
  请注意,分隔 clr-namespace 标记和其值的字符是冒号 (:),而分隔 assembly 标记和其值的字符是等号 (=)。这两个标记之间使用的字符是分号。例如:
  xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary.dll"
  映射到当前程序集  如果引用的 clr-namespace 是在引用自定义类的应用程序代码所在的程序集中定义的,则可以省略 assembly。这种情况的等效语法是指定 assembly=,等号后不需要任何字符串标记。
  如果自定义类是在同一程序集中定义的,则不能将其用作页的根元素。不需要映射分部类;如果您希望在 XAML 中将自定义类作为元素引用,只需要映射应用程序中页的非分部类。
属性  XAML中的属性和XML中的属性一样,只不过XAML对其读取方式不同!比如Width="2",其中读取时通过TypeConverter转换为Int32类型了。在标记对象名称的后面使用名称="值"的格式,在转换时经过三个步骤如下:
1、如果 XAML 处理器遇到一个大括号,或者遇到一个从 MarkupExtension 派生的对象元素,则将首先计算所引用的标记扩展(而不是将该扩展作为字符串来处理),而且将使用由标记扩展返回的对象。在许多情况下,由标记扩展返回的对象将是对现有对象的引用,或者是一个将计算推迟到运行时的表达式,而不是一个新对象。
2、如果该属性 (Property) 是用指定的 TypeConverter 声明的,或者该属性 (Property) 的值类型是用属性 (Attribute) TypeConverter 声明的,则该属性 (Attribute) 的字符串值将作为转换输入提交到类型转换器,该转换器将返回一个新的对象实例。
3、如果没有 TypeConverter,则将尝试直接转换为属性类型。最后一个级别是直接在基元类型之间转换,或者在枚举中检查名称(这将返回匹配的值)。
  在没有找到制定的格式将会异常失败!
  枚举属性
  声明属性时如果类型为Enum(枚举),在XAML中您只需要输入枚举中的成员名称。XAML会通过Enum.Parse方法获取其真正成员,其中类型为“枚举属性类型”中找到其成员名称。多个值可以使用逗号分割,但如果有此添加TypeConverter类型转换器时,则有可能是加号(+)等等区分。

  属性元素
  由于属性是有多种类型的,可以是String、Int32、自定义类。当一些.Net类中没有TypeConverter转换器时,“属性名=值”方式是表达不了一个类的。也就不可能赋予给属性,所以XAML中提供了元素为属性,格式如下:
http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="styles" Height="265" Width="402">      图2
  这段代码实现了Button的样式功能,其中Style对象要添加到Window.Resources里。其中Window.Resources为标记元素,子标记是赋予的值。
  附加属性
附加属性是.Net 3.0中WPF控件中的新面象对象架构,两个控件可以互相使用各自的属性值。通常会子控件使用父控件的属性赋值,并且父控件循环子控件,获取自己属性的值并响应的操作,如图3所示。也可以子控件获取父控件的属性,设为子控件的默认值。
声明附加属性:
public static readonly DependencyProperty TopProperty=DependencyProperty.RegisterAttached("PropertyName",ValueType,FromType,defaultPropertyMetadata);
   PropertyName:第一个参数为附加属性的名称,用于外部查找使用,XAML中使用此名称。   ValueType:附加属性值的类型 FromType: 类声明所在类的类型引用 defaultPropertyMetadata:在属性初始化时使用的默认值,用于控件在没设置前有默认布局值!
  
  嵌套控件结构 图3
示例代码:
大概Canvas的重写:
public class Canvas:Panel{
public static readonly DependencyProperty TopProperty=DependencyProperty.RegisterAttached("Top",typeof(int),typeof(Canvas),new PropertyMetadata(0));
public static readonly DependencyProperty LeftProperty=DependencyProperty.RegisterAttached("Left",typeof(int),typeof(Canvas),new PropertyMetadata(0));
//...其它属性
[TypeConverter("System.Windows.LengthConverter, PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null")]
[AttachedPropertyBrowsableForChildren]
public static double GetTop(UIElement element){ return element.GetValue(TopProperty); }
public static void SetTop(UIElement element, double length){ element.SetValue(TopProperty,length); } //...其它Set和Get方法,以此类推。。。 }
XAML中:
http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="335" Width="348" Padding="0" Margin="0">
  集合类型属性元素语法
  这里指的集合类包括ICollection,IList,IDictionary等.Net标准集合接口实现的类,并用“元素属性”表达。在“元素属性”中添加类型标记,其XAML处理器会自动创建实例并使用Add方法添加入集合属性中。
图4  图4中为集合属性,两个Setter标记表示Setters中的两个对象!
附加事件
  其实附加事件和附加属性是相似的,只不过子控件继承了父控件的事件。WPF一些控件默认也使用了事件冒泡机制,在一个Button中Click事件没有取消向中冒时,会检测父控件是否绑定了ButtonBase.Click的附加事件,如果绑定则执行!一直到最顶层控件。
示例代码:
http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="282" Width="283" Padding="0" Margin="0">
程序代码:
private void BTNCLICK(object sender, RoutedEventArgs e) { MessageBox.Show((e.Source as Button).Content.ToString()); }
标记扩展
  在TyperConverter这之前由XAML处理器调用MarkupExtension抽象类实现,可以通过绑定、资源表达式获取对象赋于属性。表达式的语法格式使用两个大括号包括指令,比如{Binding ...}。

  在这里,StaticResource 用来标识 StaticResourceExtension 类,该类提供标记扩展实现。下一个字符串 MyStyle 用作非默认 StaticResourceExtension 构造函数的输入,在该构造函数中,从扩展字符串提取的参数用来声明所请求的 ResourceKey。MyStyle 应当是定义为资源的 Style 的 x:Key 属性 值。StaticResource 标记扩展用法要求使用该资源,在加载时通过静态资源查找逻辑来提供 Style 属性值。

源文之:http://www.wpfhome.com/help/default.aspx?id=18

2007年11月30日星期五

Windows presentation foundation 文章之家

成功的脚印从此开始!