silverlight开发篇入门

This item was filled under [ silverlight ]

from:http://silverlight.jc.jishu.me

XAML语法入门

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类型转换器时,则有可能是加号(+)等等区分。

<Trigger Property=”Visibility” Value=”Collapsed,Hidden”>
<Setter … />
</Trigger>

属性元素

由于属性是有多种类型的,可以是String、Int32、自定义类。当一些.Net类中没有TypeConverter转换器时,“属性名=值”方式是表达不了一个类的。也就不可能赋予给属性,所以XAML中提供了元素为属性,格式如下:

<Window
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml
Title=”styles” Height=”265″ Width=”402″>
<Window.Resources>
<Style x:Key=”btnStyle” TargetType=”Button”>
<Style.Setters>
<Setter Property=”Foreground” Value=”Blue”/>
<Setter Property=”Background” Value=”AliceBlue”/>
</Style.Setters>
</Style>
</Window.Resources>
<Button Style=”{StaticResource btnStyle}” Name=”button1″>WPF HOME</Button>
</Window>

图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

嵌套控件结构 图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中:

<Window x:Class=”XamlPad.Window1″
xmlns=”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″>
<Canvas Width=”338″ Height=”308″ x:Name=”Canvas1″>
<Button Canvas.Left=”30″ Canvas.Top=”51″ Height=”69″ Name=”button1″ Width=”131″>Button</Button>
<Button Canvas.Left=”179″ Canvas.Top=”51″ Height=”69″ Name=”button2″ Width=”131″>Button</Button>
<Button Canvas.Left=”30″ Canvas.Top=”134″ Height=”69″ Name=”button3″ Width=”131″>Button</Button>
<Button Canvas.Left=”179″ Canvas.Top=”134″ Height=”69″ Name=”button4″ Width=”131″>Button</Button>
<Button Canvas.Left=”30″ Canvas.Top=”216″ Height=”69″ Name=”button5″ Width=”131″>Button</Button>
<Button Canvas.Left=”179″ Canvas.Top=”216″ Height=”69″ Name=”button6″ Width=”131″>Button</Button>
<Label Canvas.Left=”91″ Canvas.Top=”9″ Height=”32″ Name=”label1″ Width=”142″>Parent Canvas Control</Label>
</Canvas>
</Window>

集合类型属性元素语法

这里指的集合类包括ICollection,IList,IDictionary等.Net标准集合接口实现的类,并用“元素属性”表达。在“元素属性”中添加类型标记,其XAML处理器会自动创建实例并使用Add方法添加入集合属性中。

<Style x:Key=”btnStyle” TargetType=”Button”>
<Style.Setters>
<Setter Property=”Foreground” Value=”Blue”/>
<Setter Property=”Background” Value=”AliceBlue”/>
</Style.Setters>
</Style>

图4
图4中<Style.Setters>为集合属性,两个Setter标记表示Setters中的两个对象!
附加事件

其实附加事件和附加属性是相似的,只不过子控件继承了父控件的事件。WPF一些控件默认也使用了事件冒泡机制,在一个Button中Click事件没有取消向中冒时,会检测父控件是否绑定了ButtonBase.Click的附加事件,如果绑定则执行!一直到最顶层控件。

示例代码:

<Window x:Class=”XamlPad.Window1″
xmlns=”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″>
<Canvas Width=”260″ Height=”246″ x:Name=”Canvas1″ ButtonBase.Click=”BTNCLICK”>
<Button Canvas.Left=”13″ Canvas.Top=”20″ Height=”64″ Name=”button1″ Width=”220″>按扭1</Button>
<Button Canvas.Left=”13″ Canvas.Top=”90″ Height=”64″ Name=”button2″ Width=”220″>按扭2</Button>
</Canvas>
</Window>

程序代码:

private void BTNCLICK(object sender, RoutedEventArgs e)
{
MessageBox.Show((e.Source as Button).Content.ToString());
}

标记扩展

在TyperConverter这之前由XAML处理器调用MarkupExtension抽象类实现,可以通过绑定、资源表达式获取对象赋于属性。表达式的语法格式使用两个大括号包括指令,比如{Binding …}。

<Button Style=”{StaticResource MyStyle}”>My button</Button>

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

Silverlight之Javascript编程入门

Silverlight的界面是通过控件套用控件来改变页面的布局与实现体验者的视觉效果的。本文介绍Silverlight即时显示JavaScript程序的状态,由灵为详细介绍JavaScript实现对Silverlight的控件访问、修改、删除、创建。

实现效果如下:

提示:对控件进行操作,如果在控件的onLoad之前访问和操作都会出现异常!,是因为找不到对象。
下面的实例是JavaScript循环创建动画的效果,显示内容可以随意改变。控件的格式是XAML中定义的TextBlock(文本控件),包括Animation创建,添加,和删除等功能。
变量说明:

var txtFormat=new _textBlock(); //字体格式对象
var writeText=”Welcom to WPF.COM!”; //运画显示内容
var CanvasLeft=0; //随环改变
var CanvasTop=0; //加载的XAML中的高度位置
var charIndex=0; //显示的字符索引
var split_width=15; //每一个字符的宽度,可以对此智能改变
var _silverlight_c; //指定的Silverlight控件对象
在Page.xaml.js文件中创建了_textBlock类,使用此类记录textBlock中的格式,大小信息。
function _textBlock()
{
this.fontFamily=”";
this.width=0;
this.height=0;
this.textWrapping=”Wrap”;
this.fontSize=0.0;
}

var txtFormat=new _textBlock();
在onLoad事件中加载了XAML中的格式,并把样式控件删除,并且调用了显示动画的方法(goAnimation)。

handleLoad: function(control, userContext, rootElement)
{
this.control = control;
_silverlight_c=control;
var tStyle=control.content.findName(”tStyle”);
for(var i in txtFormat)
{
txtFormat[i]=tStyle[i];
}
CanvasLeft=tStyle["Canvas.Left"];
CanvasTop=tStyle["Canvas.Top"];
control.content.root.children.remove(tStyle);
tStyle=null;
goAnimation();
}

下面是goAnimation的代码:

function goAnimation(){
if(charIndex<writeText.length)
{
var this_char=writeText.substr(charIndex,1);
if(this_char!=” “)
{
var t_control=_silverlight_c.content.createFromXaml(’<TextBlock xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” Text=”Hello” x:Name=”t’+charIndex+’”><TextBlock.RenderTransform><TransformGroup><ScaleTransform ScaleX=”1″ ScaleY=”1″/><SkewTransform AngleX=”0″ AngleY=”0″/><RotateTransform Angle=”0″/><TranslateTransform X=”0″ Y=”0″/></TransformGroup></TextBlock.RenderTransform></TextBlock>’);
CanvasLeft+=split_width;
for(var i in txtFormat){t_control[i]=txtFormat[i];}
t_control["Canvas.Top"]=-20;
t_control["Canvas.Left"]=CanvasLeft;
t_control.foreground=”#ffffffff”;
t_control.Text=this_char;
_silverlight_c.content.root.children.add(t_control);
var storyboard_str=’<Storyboard xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” x:Name=”animation’+charIndex+’”>’;
storyboard_str+=’<DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetName=”t’+charIndex+’” Storyboard.TargetProperty=”(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)”>’;
storyboard_str+=’<SplineDoubleKeyFrame KeySpline=”0.091,0.532,1,1″ KeyTime=”00:00:00.6000000″ Value=”-360″/>’;
storyboard_str+=”</DoubleAnimationUsingKeyFrames>”;
storyboard_str+=’<DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetName=”t’+charIndex+’” Storyboard.TargetProperty=”(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)”>’;
storyboard_str+=’<SplineDoubleKeyFrame KeySpline=”0.091,0.532,1,1″ KeyTime=”00:00:00.6000000″ Value=”‘+CanvasTop+’”/>’;
storyboard_str+=’</DoubleAnimationUsingKeyFrames>’;
storyboard_str+=’<DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetName=”t’+charIndex+’” Storyboard.TargetProperty=”(UIElement.Opacity)”>’;
storyboard_str+=’<SplineDoubleKeyFrame KeyTime=”00:00:00″ Value=”0.055″/>’;
storyboard_str+=’<SplineDoubleKeyFrame KeyTime=”00:00:00.6000000″ Value=”1″/>’;
storyboard_str+=’</DoubleAnimationUsingKeyFrames>’;
storyboard_str+=”</Storyboard>”;
var storyboard_control=_silverlight_c.content.createFromXaml(storyboard_str);
t_control.Resources.add(storyboard_control);
storyboard_control.begin();
}
CanvasLeft+=split_width;
charIndex++;
setTimeout(”goAnimation()”,100);
}
}

使用content.createFromXaml方法创建Silverlight中的对象。
使用content.findName 利用x:Name查找名称对象
使用silverlight_control.children.add添加控件。
使用silverlight_control.Resources.add添加StoryBoard动画对象(Storyboard)。
storyboard_obj.Begin播放。

Silverlight中C#与Javascript事件交互

在本章里,由灵会为您介绍Silverlight的事件相关知识和实例。Silverlight使用了事件冒泡的机制,和Web中的JavaScript事件是一样!每一个控件都可以有自己独有的事件,本文会为大家介绍常用控件的事件。

先简单介绍下事件冒泡机制,理解的朋友要以先跳过此节。Silverlight是使用控件套用控件实现的,比如一个button必须在Canvas容器控件内,所以在点击Button的时候,如果Canvas指定了MouseLeftButtonDown事件,会先执行Button的MouseLeftButtonDown事件,随后执行Canvas的MouseLeftButtonDown事件。
常规事件的绑定有三种方法可以实现,在此为大家介绍。

1、在XAML的控件标记中添加属性制定,以属性=”事件的执行名称”。

<Canvas onLeftButtonDown=”leftButtonDown”></Canvas>

2、使用JavaScript的指定。。

_silverlight_control.content.findName(”controlName”).addEventListener(”onLeftButtonDown”,functionName);

3、使用MSIL的DLL中绑定(只限于Silverlight1.1以上版本)。。

silverlight_control.MouseLeftButtonDown += new System.Windows.Input.MouseEventHandler(silverlight_control_MouseLeftButtonDown);

您可以自定义事件方法,如果想在JavaScript中使用.cs或.vb中声明托管事件,必须要使用[ScriptableType]和[ScriptableMember]标记声明。

下面我们列出常用的事件列表:
事件名称 所在控件 说明。

事件名称 所在控件 说明
Loaded UIElement基类 子控件加载后发生
OnResize System.Windows.Interop.BrowserHost 静态方法,大小重设是发生
OnFullScreenChange System.Windows.Interop.BrowserHost 静态方法,全屏改变时发生
MouseLeftButtonDown UIElement基类 鼠标点击发生
MouseLeftButtonUp UIElement基类 鼠标放开时发生
MouseLeave UIElement基类 鼠标移开时发生
MouseEnter UIElement基类 鼠标经过时发生
DownloadProgressChanged Image, Downloader, MediaElement 进度更改时发生
GotFocus UIElement基类 获得焦点时发生
LostFocus UIElement基类 失去焦点时发生
ImageFailed Image 图像失败时发生
BufferingProgressChanged MediaElement 缓冲更改时发生
CurrentStateChanged MediaElement 播放状态更改时发生
MediaEnded MediaElement 播放停止时发生
MediaFailed MediaElement 播放失败时发生
MediaOpened MediaElementss 打开以后发生
KeyDown UIElement基类 键盘按下时发生
KeyUp UIElement基类 键盘起来时发生
Completed Storyboard 播放完时发生

实例:

C#

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Browser;
namespace main_app_wpfhome
{
[ScriptableType]
public partial class Page : UserControl
{
public Page()
{
// Required to initialize variables
InitializeComponent();
this.Loaded += this.Page_Loaded;
}
private void Page_Loaded(object sender, EventArgs args)
{
// Required to initialize variables. Needs to be done from loaded event so FindName works properly.
System.Windows.Browser.HtmlPage.RegisterScriptableObject(”Page”, this);
Storyboard1.Completed += new EventHandler(Storyboard1_Completed);
// Insert code required on object creation below this point.
}

void Storyboard1_Completed(object sender, EventArgs e)
{
if (Finish != null)
{
Finish(sender, e);
}
}
[ScriptableMember]
public event EventHandler Finish;
}
}

其中System.Windows.Browser.HtmlPage.RegisterScriptableObject(”Page”, this);是把自身在JavaScript声明,让Javascript所调用!这一步是非常重要的,但是其中this对象必须使用[ScriptableType]标识声明才可以。下面JavaScript片段实现了对象的调用。
JavaScript代码段:

var silverlightControl;
function sl_load(sender,arg)
{
silverlightControl=document.getElementById(’Silverlight1′);
silverlightControl.content.Page.Finish=window.finish_handler;
silverlightControl.content.root.addEventListener(”MouseLeftButtonDown”,rePlay);
}
function finish_handler(sender,arg)
{
document.getElementById(’RePlay’).style.display=’inline’;
}
function rePlay()
{
var cc=silverlightControl.content.findName(”Storyboard1″);
cc.Stop();
cc.begin();
document.getElementById(’RePlay’).style.display=’none’;
}

本实例是一个事件交互的程序,首选用Blend在Xaml中制做出一个动画Storyboard的实例对象。使用程序声明事件,并用Javascript调用事件委托。虽然可以在JavaScript中直接使用Storyboard. Completed实现,但在此实现JavaScript与C#事件托管实现!

ScrollViewer控件实现拖拽和缩放

Silverlight从1.0版本一直支持对鼠标的施动,这个实例使用了Silverlight2.0开发。并在拖动过程中实现了加速算法,和缩放功能。一些基本知识由灵在此不做详细介绍了,需要的请结合本教程中的基础知识做本文实例。

浏览效果:

打开Expression Blend 2.5,新建一个Silverlight 2 Application项目,并在page.xaml中施放添加页面所需的控件:
TextBlock(文本显示控件),命名为percent,然后以可以把内容输入“0%”为了让设计人员在设计中直接看到效果。
TextBlock(文本显示控件),内容输入为“缩放”,说明Slider控件的功能。
Slider(滑块控件),Maximum属性为“1000”,Minimum为“0”,值为“100”,Orientation为“Horizontal”。
ScrollViewer(滚动控件)HorizontalScrollBarVisibility设为Hidden,VerticalScrollBarVisibility设为Hidden。用于定位其子控件的视图位置,并添加子控件:
Image(图像控件),Source属性中制定显示的图像,Stretch设为Uniform,让图像不变形。并把Cursor属性设为Hand,命名为“img_c”。
如图所示:
ScrollViewer控件实现拖拽和缩放
图1.0

在Project项目面板中选中项目名称,右键菜单中点击“Edit Visual Studio”进入Visual Studio添加程序代码(如果VisualStudio中无法可视化编辑请到“最新Silverlight开发环境配置介绍”搭建开发环境吧)!

主要使用代码功能:

UIElement.CaptureMouse(); 启用鼠标拖动事件(就算鼠标离开窗体后放开鼠标也调用MouseLeftButtonUp和MouseMove事件)

UIElement.ReleaseMouseCapture(); 释放UIElement.CaptureMouse的鼠标拖动。

MouseEventArgs.GetPosition    获取事件当前鼠标的相对坐标位置。

Image.Stretch  Image图像控件的显示方式,None为不缩放,Fill按控件的Width和Height而缩放变化,Uniform则按实际图像比例大小缩放,UniformToFill是按照图原大小比例,以最大的填充Image显示。

Image.ActualHeight Image的希望大小,Image.Stretch为None时,Image的大小为显示的图片实际大小!

Slider.Value 为获取Slider控件的滑块当前值置的值。

ScrollViewer.ScrollToVerticalOffset 设置ScrollViewer控件的垂直滚动条的位置。

ScrollViewer.ScrollToHorizontalOffset 设置ScrollViewer控件的水平滚动条的位置。

现在为Silverlight的Image控件和Slider控件添加事件:

Slider.ValueChanged=”Slider_ValueChanged”

Image.MouseLeftButtonDown=”Image_MouseLeftButtonDown” MouseLeftButtonUp=”Image_MouseLeftButtonUp”

代码:

namespace album
{
public partial class main : UserControl
{
MouseEventHandler meh;
double img_actualWidth = 0;
double img_actualHeight = 0;
public main()
{
// Required to initialize variables
meh = new MouseEventHandler(img_c_MouseMove);
InitializeComponent();
}
Point MouseDownAt;
private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
img_c.MouseMove += meh;
MouseDownAt = e.GetPosition(null);
img_c.CaptureMouse();
}

void img_c_MouseMove(object sender, MouseEventArgs e)
{
Point p=e.GetPosition(null);
img_Scroll.ScrollToVerticalOffset(img_Scroll.VerticalOffset – ((p.Y – MouseDownAt.Y) * 1.2));
img_Scroll.ScrollToHorizontalOffset(img_Scroll.HorizontalOffset -(( p.X – MouseDownAt.X)*1.2));
MouseDownAt = p;
//img_c.SetValue(image.LeftProperty, p.X – MouseDownAt.X);
//img_c.SetValue(Canvas.TopProperty, p.Y – MouseDownAt.Y);
//img_translate.X = p.X – MouseDownAt.X;
//img_translate.Y = p.Y – MouseDownAt.Y;
//img_c.SetValue(Canvas.LeftProperty, p.X – MouseDownAt.X);
//img_c.SetValue(Canvas.TopProperty, p.Y – MouseDownAt.Y);
}

private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
img_c.MouseMove -= meh;
img_c.ReleaseMouseCapture();
}

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
if (img_scale != null)
{
string t = e.NewValue.ToString();

img_c.Width = (zoom_slider.Value/100) * img_actualWidth;
img_c.Height = (zoom_slider.Value/100) * img_actualHeight;

string leftT = “”;
string rightT = “”;
int index=t.IndexOf(’.');
if (index != -1)
{
leftT = t.Substring(0, index);
rightT = t.Substring(index + 1, t.Length – index – 1);
if (rightT.Length > 1)
{
rightT = rightT.Substring(0, 1);
}
}
else
{
leftT = t;
rightT = “0″;
}
if (leftT.Length == 1)
leftT = “0″ + leftT;
percent.Text = leftT+”.”+rightT+ “%”;
//img_scale.ScaleX = e.NewValue;
//img_scale.ScaleY = e.NewValue;
}
//betwenText.Text = “df”;
}
private void img_c_Loaded(object sender, RoutedEventArgs e)
{
percent.Text = “100%”;
zoom_slider.Value = 100;
Stretch s = img_c.Stretch;
img_c.Stretch = Stretch.UniformToFillUniform;
img_actualHeight = img_c.ActualHeight;
img_actualWidth = img_c.ActualWidth;
img_c.Stretch = s;
//img_c.Width = img_c.DataContext;
//img_c.Height = img_c.DesiredSize.Height;
}
}
}

Javascript实现Silverlight右键菜单

本篇主要讲述了Silverlight中右键菜单的实现方法,希望对您有所帮助!

由灵(作者)使用的是Expression Blend 2.5 March 2008 Preview版本开发,其中使用的“Silverlight 1 Site”项目。并没有涉及到2.0技术,本实例使用JavaScript作为交互语言!其中主要使用HTML中控件的oncontextmenu事件屏蔽Silverlight插件的右键菜单,并且调用XAML中的菜单显示(动画)或隐藏。

效果:

打开Silverlight 1 Site项目的默认添加文件“Page.xaml”文件。在可视化视图中创建一个动画,并且命名为“animation”,这个动画是由您随意设的,菜单将会控制这个animation的播放与暂停。

最后设计菜单项,其中包括“播放”、“暂停”两个按扭,这些MouseEnter和MouseLeave和MouseLeftButtonDown等事件您可以随意设定!并助把这两个按扭进行自定义,并且合组后命名为“menu”。然后为这个Menu组合设计弹出和隐藏时的运画,显示是命名为“show_menu”,“hidden_menu”,最后把context的Opacity(透明度)设为零(请注意:在显示菜单的动画中请把Opacity值显示出来)!

如图:
javascript实现Silverlight右键菜单

现在我们要用动画的组件都制作好了,然后由脚本代码联起来!

这一步是必须的,在createSilverlight的初始化参数isWindowless为’true’。这样就可以使用Silverlight插件的oncontextmenu事件了!如果您不明白这步,请下载实例后打开default.html查找“isWindowless”就可以找到。

主要脚本(page.xaml.js)片段:

control.oncontextmenu=Silverlight.createDelegate(this,function(s,e){
this.showMenu(event);
return false;
});

这是在Silverlight插件的加载事件中绑定的oncontextmenu事件,使用return false取消的Silverlight默认菜单,并且使用this.showMenu显示菜单:

showMenu:function(e)
{
var p=mousePosition(e);
p.x-=this.control.offsetLeft;
p.y-=this.control.offsetTop;
if(p.x+this.control.content.findName(”menu”).width>this.control.content.root.width)
{
p.x=this.control.content.root.width-this.control.content.findName(”menu”).width;
}
if(p.y+this.control.content.findName(”menu”).height>this.control.content.root.height)
{
p.y=this.control.content.root.height-this.control.content.findName(”menu”).height;
}
this.control.content.findName(”menu”)["Canvas.Left"]=p.x;
this.control.content.findName(”menu”)["Canvas.Top"]=p.y;
this.control.content.findName(”show_menu”).begin();
this.isMenu=true;
}

function mousePosition(ev){
if(ev.pageX || ev.pageY){
return {x:ev.pageX, y:ev.pageY};
}
return {x:ev.clientX + document.body.scrollLeft – document.body.clientLeft, y:ev.clientY + document.body.scrollTop – document.body.clientTop};
}

其中mousePosition获取的页面中鼠标的坐标位置,并且计算为Silverlight插件中的坐标位置。并把菜单的位置赋给menu的坐标,并显示出来!

C#实现Silverlight中右键菜单

在flash中 其提供了一个可定制话的右键菜单系统.(ContextMenu)

这个在silverlight中也是一样可以做到的。

过程如下:

1.添加一个<TextBlock>到Page.xaml中

<UserControl x:Class=”rightClick.Page”
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
Width=”400″ Height=”300″>
<Grid x:Name=”LayoutRoot” Background=”White”>
<TextBlock x:Name=”MyField”>Right click please.</TextBlock>
</Grid>
</UserControl>

2.在页面中设置silverlight的参数Windowless=”true”

<asp:Silverlight ID=”Silverlight1″ runat=”server” Height=”480px”
MinimumVersion=”2.0.30523″ Source=”~/ClientBin/rightClick.xap”
Windowless=”true” Width=”640px” />
<object data=”data:application/x-silverlight,” type=”application/x-silverlight-2-b2″ width=”100%” height=”100%”>
<param name=”source” value=”ClientBin/rightClick.xap”/>
<param name=”onerror” value=”onSilverlightError” />
<param name=”background” value=”white” />
<param name=”Windowless” value=”true” />
<a href=”http://go.microsoft.com/fwlink/?LinkID=115261″ style=”text-decoration: none;”>
<img src=”http://go.microsoft.com/fwlink/?LinkId=108181″ alt=”Get Microsoft Silverlight” style=”border-style: none”/>
</a>
</object>

3.最后修改Page.xaml.cs页面的代码

新建立一个ContextMenuInterceptor类.这个类是用来处理页面中“OnContextMenu”事件的.在用到HTMLPage对象你需要引入System.Window.Browser命名空间.

在调用e.PeventDefault()方法后,将会取消右键点击事件.所以silverlight不会捕捉到它.

在这里我们已经成功的拦截了右键点击事件,做我们想做的任何事情了.;)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Browser;

namespace rightClick
{
public partial class Page : UserControl
{
ContextMenuInterceptor _cmi = null;
public Page()
{
InitializeComponent();
_cmi = new ContextMenuInterceptor(MyField);
}

}

public class ContextMenuInterceptor
{
TextBlock TextField;

public ContextMenuInterceptor(TextBlock textField)
{
TextField = textField;
HtmlPage.Document.AttachEvent(”oncontextmenu”, this.OnContextMenu);
}

private void OnContextMenu(object sender, HtmlEventArgs e)
{
TextField.Text = “Right Clicked Blocked at ” + e.OffsetX + “,” + e.OffsetY;

//Cancels the event if it is cancelable.
e.PreventDefault();
}
}
}

Silverlight 本地资源“文件”

什么是本地资源

Silverlight 资源
图1

资源文件包含在Silverlight应用程序的项目窗口(图1所示)中,在项目生成后打包在.xap文件中,使Silverlight应用程序加载。使用菜单:“窗口 > 项目”显示隐藏项目窗口,这里1150810574.jpg是用户添加进去的资源文件。

添加资源文件

Silverlight 添加资源文件
图2

在资Windows 资源管理器中找到要添加的图片或文本等资源文件,右键菜单中复制文件到“剪切板”中,如图2中所示。转到Expression Blend中后,在项目窗口中的项目图标上右键菜单,选择“在Visual Studio 中编辑”,如图3所示。

Silverlight 添加资源文件 图3
图3

这时会打开Visual Studio2008,进入代码编写模式。

打开“Solution Explorer(解决方案 资源管理器)”窗口项目右键菜单中选择“Paste(粘贴)”如图4中所示。

Silverlight 添加资源文件 图4
图4

这时,在Windows资源管理器中复制的文件添加到Silverlight项目中,选择文件,属性窗口中“BuildAction(编译方式)”选为“Resource(资源)”。

使用程序代码加载图片

读取资源的方法:Application.GetResourceStream(Uri uri): StreamResourceInfo

Page.xaml文件

<UserControl

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

x:Class=”SilverlightApplication7.Page”

Width=”640″ Height=”480″>

<Grid x:Name=”LayoutRoot” Background=”White”>

</Grid>

</UserControl>

Page.xaml.cs文件

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Ink;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Windows.Resources;

using System.Windows.Media.Imaging;

namespace SilverlightApplication7

{

public partial class Page : UserControl

{

public Page()

{

// 需要初始化变量

InitializeComponent();

this.MouseLeftButtonDown += new MouseButtonEventHandler(Page_MouseLeftButtonDown);

}

void Page_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

Image img = LoadImage(”/SilverlightApplication7;component/1150810574.jpg”);

LayoutRoot.Children.Add(img);

}

Image LoadImage(string relativeUrlString)

{

Uri uri = new Uri(relativeUrlString, UriKind.Relative);

StreamResourceInfo sri = Application.GetResourceStream(uri);

BitmapImage bimg = new BitmapImage();

bimg.SetSource(sri.Stream);

Image img = new Image();

img.Source = bimg;

return img;

}

}

}

使用代码加载文本

Uri uri = new Uri(”/SilverlightApplication7;component/remark.txt”, UriKind.Relative);

StreamResourceInfo sri = Application.GetResourceStream(uri);

System.IO.StreamReader reader = new System.IO.StreamReader(sri.Stream);

MessageBox.Show(reader.ReadToEnd());

Bookmark and Share

silverlight 的界面UI篇

This item was filled under [ silverlight ]

from: http://silverlight.jc.jishu.me/

Expression Blend入门

教程中使用的是Expression Blend 2.0 sp1版本。

2.1. 启动Expression Blend

开始菜单 > 程序 > Microsoft Expression > Microsoft Expresion Blend 2点击动行!如图2.11所示

Expression Blend

图2.11

2.2. 新建项目

主菜单中选择:文件(F) > 新建项目(W),这会出现“图2.21”的界面,这时在“位置”中选择一个保存的位置,Expression Blend会建立项目需要的一些文件:“bin,obj,Properties,App.xaml,App.xaml.cs,Page.xaml,Page.xaml.cs, sl1.csproj”。并进入了设计界面。这时建立一个Silverlight项目对应生成一个.xap文件。

Expression Blend

图2.21

2.3. 切换视图

为了更灵活的办公,设计试图的另换切换可以带来很大的方便。这时您可以按“Shift”快捷键,这时界面属性和状态时间轴面板都就隐藏了,为您承让出更多的空间任意发挥创意了!

菜单中选择:窗品(W)> 活动工作区(A)> 动画工作区(A),这时您的环境布局有了很大的改变。这时您还可以在菜单中选择:窗品(W)> 活动工作区(A)> 设计工作区(A)切换到您想要的布局模式。

平移快捷键:您可以把美工板中任意画上些内容,在工具框中选择工具后,在画面点下鼠标移动后放开即可。然后可把左下角的Expression Blend设为800%。这时按下空格同时,在美工板拖拽,就可以实现移动画布的显示位置。

代码和设计模式切换,菜单中选择:视图(V)> 活动文档视图(V) 下面进行切换代码或设计模式。

设计布局

在左下角的美工板里,有Expression Blend辅助设计视图,分别为“显示/隐藏对齐网格”,“启用/禁用网格线对齐”,“启用/禁用对齐线对齐”。您可以灵活的试试,使工作变的轻松些。

2.4. 颜色

在Silverlight中使用的颜色是8位16进制的,其中前两位是透明颜色。

示例:属性面板改变按钮的字体颜色、背景颜色

第一步:在工具框中选择Expression Blend按钮控件,在美工板中绘制一个按扭,并选中如“图3”所示。

Expression Blend

图3

第二步:打开属性面板菜单:窗口(W)> 属性(T),打开属性面板,如“图2.41”所示。

Expression Blend

图2.41

其中Background为背景颜色,Foreground为前景(文字颜色)颜色,点击图中所示的Background,然后再在下面的调色板中进行选择想要的颜色。然后点击Foreground,然后在下面选择想要的字体颜色。

2.5. 属性面板

设计手里的法宝,因为在属性面板中,每一个控件(路径、按扭、文本)的内容是不一样的,所以建议朋友自由查看,并找出其中则律才是成功之道。下面更出常见属性的解示,供需要朋友查询:

名称/图标 说明 名称/图标 说明
Background 背景色 BorderBrush 边框颜色
Foreground 字体颜色 OpacityMask 一个作为Brush实现的不透明蒙版,该蒙版应用到此元素所呈现内容任何Alpha通道蒙板。
Fill 控件内部填充的颜色 Stroke 边框的颜色
ZIndex 层次,如果两个控件的某个部分都在一个像素中,其这时会显示ZIndex大的控件像素 ToolTip 鼠标上去控件,提示的信息。
VerticalAlign 竖向对齐 HorizontalAlign 横向对齐
Opacity 透明度 BorderThickness 上下左右里各边框的粗丝。
Visibility 是否可见 值:显示/隐藏 Content 内容,一般为文本框中的数据。
Margin 控件与父控件的距离。 Padding 控件内部的填充距离,填出边距指在对象和其它子控件的边框之间的距离。默认零
Width 宽(像素) Height 高(例素)
Cursor 当控件放在控件上时,鼠标的形状。 IsHitTestVisible 该值声明是否可以返回此元素作为其呈现内容的某些部分的点击测试记过。
Row Grid表格控件中第几行中出现 Column Grid表格控件中第几个列中出现
RowSpan Grid表格控件中横向跨单格出现,如2,向右出现在两个单元格中。 ColumnSpan Grid表格控件中坚向跨单元格显示,如2,向下出现在2个单元格中。
IsTabStop 控件是否包含在Tab键定位中。换句话说就是按Tab时是否在控件中停留焦点。 TabIndex 一个值,该值决定元素的逻辑定位顺序。
Tag 任意对象值,该值可用于存储有着于元素的自定义信息。(换句话说,不用也行) FontStretch 字体在屏幕上紧缩或加宽的程度。默认值是Normal
FontStyle 设置字体形状,可以把字体设为斜体 FontWeight 设置字体的粗细程度
RenderTransform 影响此元素的呈现位置的转换信息。呈现转换通常用于动态显示元素的临时效果或者向元素的临时效果。变形器。 IsEnable 是否启用,激活状态。
Clip 用于定义元素内容轮廓的几何图形。几何图形之外的元素或内容将从视觉上在呈现的布局中剪切掉。名词:遮罩! RenderTransformOrign xy两个数组组成。呈现转换相对于元素 边界的中心点。
MaxWidth 最大宽度约束 MaxHeight 最大高度约束
MinWidth 最小宽度约束 MinHeight 最小高度约束
HorizontalScrollBarVisibility 横向滚动条选项显示 VerticalScrollBarVisibility 竖向滚动条显示选项

2.6. Silverlight常用控件介绍

形状 名称 控件
Expression Blend Path 路径 可以化出各种各样的图形。
Expression Blend Button按扭 使用者选择点击,出发程序代码。
Expression Blend Canvas画布 使用的固定坐标,适应与自由布局。
Expression Blend CheckBox复选框 通过选中,获取使用者的操作。
Expression Blend StackPanel堆叠 自动布局的容器控件,使里面的子控件按顺序显示。
Expression Blend Grid 网格 可以定义多个单元格,使布局更整齐。
Expression Blend Image 图像 用与显示指定的图像文件。
Expression Blend Line 直线 直线图形
Expression Blend Border 边框 容器控件,可以定义丰富的边框,和背景定义。
Expression Blend Password密码框 用与输入密码
Expression Blend RadioButton 单选框 用与多个选项只可选一值时使用。
Expression Blend Path 铅笔 更简单的方式创建Path对象。
Expression Blend Rectangle 矩形 矩形图形
Expression Blend ScrollBar 滚动条 一般用在显示一个控件的哪个部份的控件。
Expression Blend ScrollViewer放大局部器 个允许您滚动其中所含的子元素的元素。该元素仅包含单个子元素。因此在大多数情况下,需要在其中使用堆叠面板、画布面板或网格面板等版式面板。“ScrollViewer”可用于其他控件(如列表框)的模板中,以支持内容滚动功能。当“ScrollViewer”中的内容过多时,可以启用内容剪切。还可以对滚动条进行控制,令其处于不可用、隐藏或可见状态,或者使其仅仅在需要时自动显示。
Expression Blend ListBox列表控件 显示多个数据,由使用者选择。常用与多的数据,可以绑定。
Expression Blend Slider 滑块 设置一个最大或最小值,通过滑块设置或获取其比例中的值。
Expression Blend TextBlock 文本块 显示有格式文本,可在属性框中按需要定义
Expression Blend TextBox 输入框 可以输入键盘输入的文本框
Expression Blend Ellipse 椭圆形 创建椭圆形状。
Expression Blend Media Element 媒体播放元素 支持在线播放mp3.wma.wmv格式音频视频格式,支持流媒体mmsrtsp协议。

几何图形

在Silverlight中的失量图形控件主要分为三个:Ellipse椭圆形状、Rectangle矩型形状、Path曲线,供美工朋友实现绘制界面。Blend 提供了标准的矢量绘图功能,以便您能够像在任何矢量图形程序中那样绘制形状、路径和蒙板。如果需要绘制更高级的图形和作品,请考虑使用替代的矢量图形程序(如 Microsoft Expression Design 2)。Expression Design 2 甚至还允许用户将图形导出为 XAML,以便在 Expression Blend 中使用。

绘制形状

在“工具箱”中,单击“矩形”、“椭圆形”或“线”

在美工板上,从任意点开始拖动以定义矩形或椭圆的宽度和高度,或者定义线的起点和终点,即可绘制矩形、椭圆形或线。请注意,在绘制形状时,宽度和高度尺寸将如下所示:

快捷键:

如果在拖动时按住 Shift,则在绘制矩形时会创建正方形,在绘制椭圆时会创建圆,在绘制线时会将其约束到 15 度角的倍数。

如果在拖动时按住 Alt,将会从中心往外绘制形状,而不是从左上角开始绘制。

绘制直线

用“笔”工具绘制直线

在“工具箱”中,单击“笔”

在美工板上,单击一次以定义线的起点,再单击一次以定义线的终点。

提示:

若要将线的角度限制为 45 度的倍数,请在单击以定义线的端点时按住 Shift。

用“线”工具绘制直线

在“工具箱”中,单击“线”

从所需的线起点处开始拖动,然后在所需的线终点处松开鼠标按键。

提示:

若要将线的角度限制为 15 度的倍数,请在绘制线时按住 Shift。

绘制曲线

可以使用“笔”工具绘制曲线形状,从而在美工板上形成路径对象。

绘制曲线

在“工具箱”中,单击“笔”

在美工板上单击以放置第一个节点,并且有选择地拖动指针以定义该曲线的初始方向(切线)。

对于后续的每个点,在美工板上单击并有选择地拖动指针以创建所需的曲线。

若要封闭路径,请单击所创建的第一个节点。光标应变为笔封闭光标,以指示将封闭该路径。如果希望结束路径而不将最后一个节点连接到第一个节点,请再次单击“笔”工具,或者单击工具箱中或“对象和时间线”下的任意位置。

说明:

拖动操作将定义节点的控制柄,该图柄用于描述线在该节点处的切线。绘制路径期间和完成绘制之后,可以通过更改该节点的控制柄的角度和长度,修改曲线的形状。有关详细信息,请参阅更改曲线的形状和重定义路径上点的控制柄。有关可以针对路径进行的修改的快速参考,请参阅笔和路径选择的使用。

在矩形边角设置圆角

选择要编辑的矩形。

执行下列操作之一:

在美工板上,将鼠标指针移到从矩形左上角伸出的虚线的任意一端,然后在光标显示为圆角半径图柄时进行拖动。

提示:

在拖动任一圆角半径图柄时按住 Shift,即可分别编辑 X 和 Y 圆角半径。

在“属性”面板的“外观”下,更改“RadiusX”和“RadiusY”属性的值。

将形状转换为路径

在“工具箱”中,单击“选择”,然后选择要转换为路径的形状。

在“对象”菜单上,指向“路径”,然后单击“转换为路径”。

说明:

将形状转换为路径后就不能再编辑形状所特有的属性(如,矩形的圆角半径)。而且,如果在转换之前向形状应用了样式,则已转换路径的属性将重置为路径的默认值(无填充画笔,有黑色笔划)。

删除路径的一部分

在“工具箱”中,单击“路径选择”

选择包含要删除的线段的路径,然后选择该线段使其突出显示。

按 Delete键。

向现有路径添加点

在“工具箱”中,单击“选择”,然后选择要为其添加点的路径。

再次在“工具箱”中单击“笔”

当悬停在路径上时,“笔”工具将变为以指示可以添加点。单击以添加点。

说明:

如果向曲线段添加点,所产生的点将会定义适当的控制柄以描述曲线在该点处的切线。或者,如果向直线段添加点,则不会定义任何控制柄。

用线连接两条路径

选择要在其间绘制线的路径对象。(若要选择多个对象,请按住 Ctrl 键。)

在“工具箱”中,单击“笔”

当悬停在某个开放端点上时,“笔”工具将变为以指示可以延伸当前路径。单击并有选择地拖动该端点。附加到该点的线段将突出显示。此时,可以选择添加更多点,然后再将此路径连接到另一条路径。

当悬停在另一个开放端点上时,“笔”工具将变为以指示即将用线连接点,或者,“笔”工具将变为以指示即将闭合该路径。单击并有选择地拖动该端点。

说明:

拖动操作将定义点的控制柄以用于描述线上该点处的切线。绘制完路径之后,可以通过更改该点的控制柄的角度和长度来修改曲线的形状。

更改曲线的形状

在“工具箱”中,单击“路径选择”

执行下列操作之一:

单击要修改的曲线任意一侧的节点(光标将变为),然后拖动节点或控制柄,以更改曲线的切线(光标将变为)。

单击要修改的曲线任意一侧的曲线段(光标将变为),然后拖动曲线段或控制柄,以更改曲线的切线(光标将变为)。

提示:

通常,在拖动一个控制柄时,会同时调整其相对的图柄,以生成一条光滑、统一的曲线。但是,在拖动控制柄时按住 Alt 以分别调整每个控制柄,即可打断此种关联。

重定义路径上点的控制柄

在“工具箱”中,单击“路径选择”。

选择包含要修改的点(或顶点)的路径。

按住 Alt,然后在光标变为如下光标之一时单击节点,再从节点拖离以重定义控制柄。

光标 执行的操作
“转换点”光标 使任何尖角点变得平滑(如果已经平滑,则通过单击点来更改曲线的角度)
“转换段”光标 获取一条段,并使其弯曲通过鼠标位置
“转换切线”光标 独立于另一边调整选定的切线

或者,可以单击路径的节点或段以显示切线图柄,然后在光标变为“移动切线”光标时单击并拖动某个切线端点。

合并形状或路径

在美工板上选择两个或更多路径或形状。(若要选择多个对象,请按住 Ctrl 键。)

在“对象”菜单上,指向“合并”,然后单击下列选项之一:

若要将所有形状或路径均合并到单一对象中,请单击“相并”。

若要根据相交部分剪切形状或路径,但保留所有未相交部分,请单击“相割”。

若要保留对象的重叠区域并删除不重叠区域,请单击“相交”。

若要保留非重叠区域并删除重叠区域,请单击“相斥”。

若要删除最后选定的形状以外的其他所有选定形状,请单击“相减”。

所产生的对象将取代在合并之前选定的最后一个对象,并采用该对象的属性。

合并形状或路径

合并前的两个形状 相交
相并 相斥
相割 相减

生成复合路径

选择要转换成复合路径的两条或更多路径。(若要选择多个对象,请按住 Ctrl 键。)

在“对象”菜单上,指向“路径”,然后单击“生成复合路径”。

产生的路径将取代在复合之前选定的最底端路径(在 Z 顺序中),并采用该路径的属性。

两条路径转换为一条复合路径

生成复合路径

释放复合路径

在创建复合路径之后,可以随时分离复合路径,但不会还原各个路径对象的原始属性。

选择复合路径。

在“对象”菜单上,指向“路径”,然后单击“释放复合路径”。

创建不透明蒙板

不透明蒙板是一种忽略其颜色并将其不透明度传递给蒙板对象的画笔。在不透明蒙板中不透明的部分,应用蒙板的对象将是不透明的;而在不透明蒙板中透明的部分,应用蒙板的对象将是透明的。可以通过“属性”面板的“外观”部分,为任何对象定义不透明蒙板。有关不透明蒙板的详细信息,请参阅“不透明蒙板”。

使用渐变画笔为对象创建不透明蒙板

在“工具箱”中,单击“选择”,然后在美工板上选择一条路径。

从“属性”面板中的“画笔”下的列表中选择“OpacityMask”,单击“渐变画笔” 选项卡,然后在颜色编辑器的底部选择“线性渐变” 或“径向渐变” 选项。

为了确保蒙板至少允许其背后的一个或多个对象显露出一小部分,请至少将一个梯度停止点的 Alpha 值定义为小于 100% 的值。

使用画笔资源为对象创建不透明蒙板

在美工板上创建一个“Grid”或其他版式面板元素。

双击该面板元素将其激活,以便添加子元素。

添加用于组成不透明蒙板的各种子元素。

对于包括版式面板在内的所有元素,在“属性”面板中的“外观”下调整“Opacity”属性。

完成不透明蒙板的设计之后,在“对象和时间线”下选择该版式面板,然后在“工具”菜单上指向“生成画笔资源”,并选择下列可用画笔类型之一:

生成图形画笔资源 图形画笔使用图形喷涂区域。所使用的图形可以包含形状、文本、视频、图像或其他图形。

生成可视画笔资源 可视画笔使用可视效果喷涂区域。如果该画笔是从包含动画或交互控件的面板创建的,则可以在运行时更新所使用的可视效果。此时,将显示“创建 Brush 资源”对话框。

说明:

画笔资源可由美工板上的任意对象生成,其中包括从 Microsoft Expression Design 2 导入的作品资源。请记住,在将画笔用作不透明蒙板时,将忽略画笔的颜色,因为只有不透明值才会产生蒙板效果。

此时,将显示“创建 Brush 资源”对话框。

在“资源名(关键字)”下,输入关键字名称。其他元素通过此名称引用该资源,从而应用该资源。

在“定义位置”下,选择适当选项,以确定资源的定义范围:

若要使资源能够由应用程序中的所有文档使用,请选择“应用程序”。

若要使资源只能由当前文档使用,请选择“本文档(Window: Window)”。

若要使资源只能由创建资源时所在的对象或其子对象使用,请选择“本文档(对象)”。

若要在一个能够在其他项目中重用的资源字典文件中定义资源,请选择“资源字典”。接下来,可以选择现有的资源字典文件,或者“新建”资源字典文件。

单击“确定”以退出该对话框并创建资源。

若要将画笔资源作为不透明蒙板应用于对象,可以执行下列操作之一:

在“资源”面板中,找到所需的画笔资源,然后将其拖到美工板上要应用蒙板的对象上。

选择要应用蒙板的对象,然后在“属性”面板中的“画笔”下,单击“画笔资源” 选项卡,并选择所需的画笔资源。

布局控件

本章主要抄写自微软MSDN资料!

3.1. 层的概念

层提供了一种快速简便的方法,来创建页面级布局容器以用于组织内容。从 Microsoft Expression Design 2 等其他程序导入内容时,层特别有用。从 Expression Design 2 导入的作品可使用每个导入层的画布面板。

您可以使用“工具”菜单上的“新建层”命令来创建新层。Expression Blend 将根据当前文档的“LayoutRoot”所指定的内容来创建新层。
层的概念图


3.2. 组

组的创建与元件不同,“组”达不到代码重用的目的。组本身是一个容器,可使用Grid或Canvas等容器控件实现,优点可通过移动组而移动组中所有控件,使组内的控件为一个整体。在层面板“对象和时间轴”面板里面清楚看到层次结构,容易找到要选中的对象。
上节中“层的概念”可以由“组”来实现。比如把多个控件组成一个组时,也是把一组控件放在一个层的下面。下面举例:
3.3. 子控件

Ø 子控件的选择
在美工面板中,通过双击“组”可以进入子控件的编辑状态,也可以通过使用“交互”面板中的“对象和时间轴”中,按层的方式一级一级层次展开找到您要找的控件。如图3.31中所示。


图3.31
Ø 子控件的选择


图3.32
创建一个椭圆形和一个Grid(表格)容器控件,然后用鼠标移动椭圆形控件到容器控件的里时,会出现如图3.32中显示的效果,提示您按ALT键拖动以放置进去,这样就是让椭圆形作为Grid的子控件。
3.4. Grid网格控件

与其他用来管理更具体的布局功能的布局容器相比,网格面板是最灵活的布局容器。Microsoft Expression Blend 提供了两种布局编辑模式以配合网格面板使用:
Ø 画布布局模式(默认模式)提供了与在画布面板中进行编辑类似的编辑体验。在这种模式下,当移动已设置的列或行分隔线时,位于这些行和列内的元素会保持不动。
Ø 网格布局模式(高级)提供了更高级的布局功能。在这种模式下,设计时网格面板的行为与网格的运行时行为相似。
Ø 通过单击在选定网格面板时显示在左上角的模式图标,或者通过在“选项”对话框(位于“工具”菜单上)的“美工板”部分内选中或清除“使用网格布局模式”复选框,可以在这两种模式之间切换。

适用于网格面板的布局模式


在“网格”布局模式下,对象在分为三行和三列的网格面板中的排列方式


Ø 定位、调整大小和排列
在网格面板中布局的核心是如何使用对齐、边距以及 Width 和 Height 属性来有效地定位、排列元素以及调整元素大小:
u 对齐 决定元素相对于其父元素的位置。
u 边距 决定控件四周以及子元素外部与面板边界之间的空白区域的大小。
u 宽度和高度 以像素为单位(即,设备无关 单位,每单位约为 1/96 英寸)测量的固定值。可以将这些属性设置为“Auto”,以使子元素根据父面板的大小自动调整大小。

Ø 排列子元素
您可以通过划分网格区域来排列网格中的元素。通过使用列和行分隔线创建一系列行和列,以便定义用于在网格中布置元素的区域,可以达到此目的。当网格面板是文档中的活动元素时,会沿网格的顶端和左侧显示蓝色标尺。使用“选择”工具将鼠标指针移动到标尺上时,指针将变为带有加号 (+) 的箭头,并且会有一条橙色的线显示列或行的添加位置。单击顶端标尺上的任意位置,将在网格中的该位置添加一列;而单击左侧的标尺,会添加一行。
添加列网格分隔线


可以在网格面板中绘制子元素,使其相互重叠。重叠的元素将按照 Z 顺序(绘制元素或将其放到父元素中的顺序)进行显示。可以使用“对象”菜单上的“排序”来更改元素的 Z 顺序;也可以在“交互”面板的“对象和时间线”下右键单击相应的项,指向“排序”,然后单击所需的命令,从而更改元素的 Z 顺序。子元素也可以跨越多列或多行。也可以启用对齐,以便通过与对齐线进行对齐,更好地排列对象。通过对齐,在美工板上拖动对象时,既可以将对象与同一容器元素(如版式面板)中其他对象的边距、基线(对于文本对象)或对齐线(红色虚线)对齐,也可以将对象与网格面板中的列和行分隔线对齐。

Ø 从网格面板中移除行或列
双击顶端或左侧标尺上的网格分隔线,即可将行或列删除。或者,也可以单击网格分隔线,再按 Delete。

Ø 调整行和列的大小
在处于网格面板的“网格布局模式”下时,网格面板顶端和左侧的标尺周围将显示锁图标。可以使用这些锁图标来设置要对网格中的行和列使用的大小调整选项。可以设置行的高度值和列的宽度值。有三个不同的选项可用于在网格中调整行和列的大小,这些选项又会影响子元素在网格中的排列方式。这些调整大小选项如下所示:

u 固定大小 使用像素值 (px);通过单击锁图标将其设置为“像素调整大小”(锁定位置)来进行设置。固定大小意味着行或列不会调整大小。
u 星形调整大小 使用星号值 (*);通过单击锁图标将其设置为“星形调整大小”(解锁位置)来进行设置。星形调整大小与 HTML 中的按百分比调整大小的效果相似。
u 自动调整大小 不使用定义的“Width”和“Height”属性;通过单击锁图标将其设置为“自动调整大小”来进行设置。自动调整大小意味着网格面板中的元素将随父元素一起调整大小。

为网格面板中不同的列设置的星形调整大小和自动调整大小

在美工板上选择一个网格分隔线后,可以使用“属性”面板选择调整大小选项,并在使用星形或固定大小调整时调整“Width”属性。也可以在“属性”面板中设置列网格分隔线的“MaxWidth”和“MinWidth”属性。

Ø 定位子元素
在“画布布局模式”下,可以通过直接在美工板上工作并将元素拖动到网格面板中的任意位置(甚至拖到边界以外)来直观地定位元素,也可以在“属性”面板的“布局”下输入精确的位置值。

在“网格布局模式”下,可以通过设置每个元素的边距来设置子元素在网格中的位置。边距指定一个元素相对于定义网格的行和列或网格中的单元格边缘偏移的量。将子元素拖动到网格中时将会设置边距,边距表示从选定元素的边缘到下一条网格线(行或列)的距离。通过单击边距(节点)修饰工具即可设置边距。如果边距修饰工具如所示是断开的,则表示尚未设置边距。如果边距修饰工具如所示是封闭的,则表示已经设置边距。若在运行时调整网格的大小,则任何未设置边距的元素将保留在原位,而绑定到边距的元素则会在调整边距的大小时随之移动。
Expression Blend 也会使用简单的规则来设置默认的对齐方式:如果所绘制或调整大小的子元素跨越行或列的中间,则 Width 和 Height 将设置为 Auto;否则它将被固定。也可以设置对齐方式选项,以指示在调整网格大小时是否强制应用边距。对齐方式在网格中显示为实线(已设置对齐方式)或虚线(未设置对齐方式),如下图所示。
网格面板中的一个按钮,已绑定到(已设置边距 – 请注意显示的边距值)左侧和右侧,但未绑定到(未设置边距)顶部和底部

水平对齐
u Left 。在调整大小时,定位到左侧但向右拉伸。
u Center。无论如何调整大小,始终定位到水平中心。
u Right。在调整大小时,定位到右侧但向左侧拉伸。
u Stretch。在调整大小时,同时沿两个水平方向拉伸。

垂直对齐
u Bottom。在调整大小时,定位到底端但向顶端拉伸。
u Center。无论如何调整大小,始终定位到垂直中心。
u Top。在调整大小时,定位到顶端但向底端拉伸。
u Stretch。在调整大小时,同时沿两个垂直方向拉伸。

边距设置 以像素为单位(或设备无关单位,每单位约等于 1/96 英寸)测量的“Top”、“Left”、“Right”和“Bottom”边距的固定值。当您将子元素拖动到网格中时会设置这些值,它们表示从选定元素的边缘到下一条网格线的距离。
Ø 调整子元素的大小
主要有两种用于子元素的调整大小选项:固定大小或自动调整大小。固定大小的元素在“布局”类别中设置了特定的“Width”和“Height”值。自动调整大小的元素将“Width”和“Height”值设置为“Auto”,并且根据父面板的大小自动调整大小。
u MinWidth 和 MinHeight 元素在行或列中可以调整或缩放到的最小大小。
u MaxWidth 和 MaxHeight 元素在行或列中可以调整或缩放到的最大大小。如果不希望设置最大大小,可以将其设置为“Infinity”。
u 剪切内容 决定父面板是否应该剪切其子元素。
3.5. Canvas画板控件

Canvas画布控件是一个自由发挥容器控件,在这些控件中最比较简单的吧。因为其只需要设置绝对的位置(x、y)和Zindex层次。其它都不需要,没有规则。使用此控件比较简单,直接拖动 控件到美工板中,相信您会Grid的同时,这个也会了。哪就略过吧!
3.6. StackPanel 堆叠控件

图3.61
堆叠面板允许您按指定的方向堆叠控件。根据在堆叠面板中定义的属性,内容可以垂直(默认情况)流动或水平流动。堆叠面板主要用在列表控件中,例如用在列表框中,或者组合框的弹出列表中。在堆叠面板中创建或绘制的任意元素都将作为最后一个子元素自动添加到该面板的元素堆叠顺序中。如果添加更多子元素,堆叠面板将剪切(或隐藏)其不能容纳的那些元素。

方向 默认情况下,堆叠面板中的元素将垂直堆叠,但也可以水平堆叠。在“属性”面板中的“布局”下,将“Orientation”设置为“Horizontal(横向)”或“Vertical(坚向)”。

嵌套面板 可以使用嵌套的版式面板(也就是说,可以将版式面板用作子元素)来包含并列的元素。嵌套面板的堆叠方式与父堆叠面板中包含其他任何子元素的方式完全相同。

3.7. Border控件

Border 是一个简单的元素,用于在其他元素周围绘制边框和/或背景。Border 只能包含一个子元素。可能需要在 Border 元素中放入网格面板或画布面板,以便您能够处理多个子元素。
3.8. ScrollViewer控件

ScrollViewer 允许滚动其包含的子元素。它仅包含一个子元素,因此在大多数情况下,都需要在其中使用堆叠面板、画布面板或网格面板等版式面板。每次向 ScrollViewer 中添加子元素时,新的子元素都会覆盖现有的子元素。ScrollViewer 用在其他控件(如列表框)的模板中,以提供对内容滚动的支持。当 ScrollViewer 中的内容太长时,可以选择剪切此内容。还可以控制滚动条是禁用、隐藏、可见,还是仅在需要时自动显示。
3.9. 变形处理

元件、场景、组实现

3.1. 场景、元件逻辑介绍
Silverlight中第一浏览出.xap中的界面时,这个界面可称为主场景,这个主场景从开发的角度来说只不过是一个控件,因为silverlight在HTML中也是充当一个Object控件。所以.xaml文件中的最顶级的控件元素可以是Grid(网格)、UserControl(用户控件)、Canvas(Canvas)等容器控件。从逻辑角度看这个顶级的控件,承载着整个Silverlight应用程序的所有画面,所以我们可以称其为场景。

元件是在场景中放的对象,也是一个.xaml文件。例:一个人在一个“世界”里算是一个元件,世界是场景,人是元件。如果把一个“人”当是场景,一个胳膊就是元件。实体上场景、元件、用户控件都是一个.xaml文件,这些名称可以为其改变逻辑意义。在这里称元件为控件的原因是,Silverlight Runtime Library运行库中己经有很多控件了,为了让思路上他们区分开,所以“元件”更直观的代替了用户创建的.xaml(用户控件,程序员喜欢用的名)。

很明显这是使用了OO面向对象的逻辑,而XML是实现这种逻辑的魔法棒!使用元件的优势:

1、 可以更好的与程序员共鸣,元件与元件独立,思路清晰了!

2、 文件变小,因为每二次使用元件时直接引用即可,小了很多代码的重写。

3、 改一更百,如果改了元件,所有引用元件的地方都会更新。

3.2. Expression Design 中绘制角色
Expression Design是一个专业的失量图形绘画软件,速度和功能上最胜与Expression Blend的绘制,所以有力与美工朋友的发挥。Expression Blend主要设计.xaml程序界面,用与程序代码的直接调用。所以我们可以在Expression Design中设计好,然后放入Expression Blend中进行布局和动画调用。

启动Expression Design工具

选择Windows开始菜单 > 程序 > Microsoft Expression > Microsoft Expression Design 2运行程序,这时出现Expression Design 的界面如图3.21所示。

图3.21

请选程序中择菜单:文件 > 新建命令,出现图3.22所示界面。请把宽为500像素,高500像素,分辨率:96,后按确定进入设计界面。

图 3.22

这时进入了设计界面,和Adobe Photoshop功能类似,而Photoshop基本使用位图,Expression Design则主要针对失量图形。因为本教程主要针对的是Silverlight,所以Expression Design略说一下,如有不明可找相关书籍学习。

下面列出两个角色,请仿照图3.23中的两个动画的逐帧中的走路时的两个形象在Expression Design中绘画出。也可去/meigong_sl/download_sanmao.html中下载,进行参考。

图3.23

基本步骤:选择在Expression Design中选择“笔”工具把第一个形象绘出轮廓,选中对象后右键菜单中可进行上下层移动,在属性面板设置路径的填充颜色、边框颜色。

画完第一个形象后,我们直接复制一份一样的,然后进行更改就可。选中第一份,在菜单的编辑 > 复制,再选择编辑 > 粘贴就可。或选中第一个帧的形象,按着Alt键,然后拖动复制出第二个一样的形象。

把第二个形象中按照图2.23中所示的形象的不同之处更改。

3.3. Expression Blend导入“Expression Design中的角色”

Silverlight 教程
图3.31

在Expression Design设计好两个的帧图形后,在菜单中选择:“文件 > 导出”命令,保存位置和文件名您可自己设定。如图3.31所示的,把要导出的项为“整个文档”,导出属性设为“XAML Silverlight 画布”。点击“全部导出”按钮后,Expression Design会把路径、文本使用Xaml文本代码表达,不可表达的使用图片导出了。

这时可以退出Expression Design程序,打开Expression Blend程序。选择菜单:“文件 > 新建项止(W)”命令,打开“新建菜目”窗口,如图3.32所示。


图3.32

在“新建项目”窗口中选择“Silverlight 2 应用程序”,并选择保存位置和名称,点击确定,如图3.32所示。

在我的电脑或Windows资源管理器中找到导出的保存位置,然后选中导出的.xaml文件,右键菜单复制或按Ctrl + C快捷键。

转回Expression Blend中,使用“窗口 > 项目”命令可显示隐藏“项目”窗口。在“项目”窗口中的SilverlightApplication5的项目图标上右键菜单中,选择粘贴命令。把导出的.xaml文件导入的项目中。如图3.33所示。


图3.33

这时在“SilverlightApplication5”下多了一个文件,并且双击打开。下节我们接着再续!

3.4. 创建“元件”
导入到Expression Blend中后,双击“三毛.xaml”文件,进入编辑状态。并Control+A全选,右键菜单复制。

选择菜单“文件 > 新建项(N)”命令,弹出图3.34“新建项”窗口。输入名称 “sanmao.xaml”,选中“包括代码文件”选项,点击确定(这时己经完成建立了一个空白的sanmao的元件)。

这时进入了sanmao.xaml的设计界面,选择菜单“编辑 > 粘贴”命令,这时在sanmao.xaml中出现了您在Expression Design中设计的角色。如图3.41中所示。


图3.41

请注意:这里的元件在第六章的“动画制作”中继续使用。

3.5. 引用“元件”
Page.xaml文件是新建“Silverlight2应用程序”项目时,模板自动创建的,是Silverlight打开时所显示的界面,是app.xaml.cs中程序入口中定义的。所以现在我们需要page.xaml加载我们创建的元件,下面为操作步骤。

1、在“项目”窗口,双击page.xaml,进入page.xaml文件的设计状态。

2、选择菜单:“项目 > 生成解决方案”命令,更新一下Expression Blend中的元件状态。

3、单击工具栏中的最后一个图标,打开“资源库”面板,如图3.51中界面。在选项卡中选择“自定义控件”,单击“sanmao”后,“资源库”窗口会自动关闭。


图3.51

4、 在Expression Blend会把“资源库”中找到sanmao元件添加到工具栏中,如图3.52所示。

图3.52

5、 双击sanmao元件,添加元件到page.xaml场景中。按F5查看效果。

动画制作

本文是接着《元件、场景、组实现》的创建的角色,接着实现的动画。

Silverlight到今才发展了两个版本,在同行业与Flash相比肯定有很多不及之处。新的技术是否有新前景呢?

动画在Expression中的支持是很灵活的,对资源的管理也透明,和Flash有着得大的改变。下面和您一起探讨常用的几种动画类型,在Expression Blend中的实现。

6.1. 逐帧动画
Expression blend2 sp1版本中有对Silverlight 2的动画设计方面完善了很多,但还有很多不完美的地方。在时间轴中无法对控件的Visibility可见/隐藏属性设置(在旭找到其它方法可以时,将会改变这里的错误)。所以这时使用Opacity(透明度)设为0%方法,达到显示/隐藏控件的目的^^下面进入正式操作。

1、打开“项目”窗口,双击打开“sanmao.xaml“文件。

2、单击角色,设为选中状态,选择菜单“对象 > 取消分组”命令,然后我们可以为其重新分组。如图3.34所示。


图3.34

3、单击空白位置,取消选择。使用鼠标在空白的无对象的地方开始点下鼠标,并拖动选中左边的第一帧的角色后放开,如图3.35中所示。

图3.35

4、选中后按Ctrl+G,或在菜单中选择“对象 > 组合 > Grid ”命令。让第一个角色为一组,并且同样的方法选中第二个角色。并按Ctrl+G进行分组。选中第一个角色,打开属性面板,名称设为“boy1”,选中第二个角色,属性中名称设为“boy2”。然后使用拖动第二个角色到第一个角色并上与第一个角色重叠,如图3.36所示。

图3.36

这里我们要实现这两个角色循环出现,一种走路的效果。

6、 把两个图形移动到左上角,点击左上外的图标将Grid的编辑模式设为“网格处于‘画布’布局模式”,然后在“对象和时间轴”窗口中,选中“UserControl”顶层,并将设计画布中的大小设为和两个角色大小一致。如图6.1.61。


图6.1.61

7、 打开“交互”窗口,在对象时间轴的面板中,选中boy2层,如图6.1.61中所示:


图6.1.61

8、 打开“属性”窗口,把外观面板中的“Opacity(透明度)”设为0。

9、 现在开始创建动画,打开交互窗口中“对象和时间线”面板中单击图标,打开“创建Storyboard资源”,如图6.2.62图中所示。


图6.2.62

10、 确定后,进入了run的动画编辑界面。拖动黄色的动画时间位置针可控制动画的间隔时间长度。如图6.2.91。


图6.2.91

11、 把时间线移动到“0:00:300”的位置,如图6.2.101所示。


图6.2.101

12、 在“对象和时间线”窗口中选择boy1层,在“属性”窗口中设Opacity为0%。再选中把boy2层,在“属性”窗口中设Opacity为100%。

13、 再把时间线移动“0:00:500”位置,在“对象和时间线”中选中boy2层,在“属性”面板中的Opacity设为0%。并选中boy1层,在“属性”窗口中的Opacity设为100%,如图6.1.131。


图6.1.131

14、 在动画单击选择中选中“run”,如图6.2.131。


图6.2.131

在“属性”窗口中,把RepeatBehavior属性设为“Forever”。使动画为重复播放。

提示:现在您可以在“对象和时间线”窗口中,单击按钮查看一下效果吧^^

15、 在“对象和时间线”窗口中选择“UserControl”顶层,打开属性窗口,点击事件图标如图6.2.131所示。


图6.2.131

16、 切换到了事件列表中后,在Loaded输入框中输入“Starting”(可任意),键入回车,程序转入Visual Studio 2008程序代码设计界面。在自动生成的代码中插入代码:

public sanmao()
{
// 需要初始化变量
InitializeComponent();
}

private void starting(object sender, RoutedEventArgs e)
{
run.Begin(); //要插入此段代码
}

17、保存并关闭Visual Studio 2008,回到Expression Blend中。

6.2. 移动动画
继续上面的操作,选择文件菜单:“文件 > 保存”命令,关闭sanmao.xaml文档。并打开page.xaml文档。

这时可能在page.xaml里面显示可能不正常,腿和手的显示的位置错了,哪是因为大小与元件内的大小不同。点击选择元件,然后选择菜单:“编辑 > 删除”命令删除,双击工具框中的“sanmao”重新添加到画布中,如图6.21所示。


图6.21

提示:如果工具框中没有“sanmao”元件,可以点击图标打开资源库的“自定义控件”选项卡中找到,列表是选择“sanmao”就会添加的工具框中。

在“交互”窗口中找到“对象和时间轴”面板,单击“sanmao”层右边的眼图标,让设计中的角色暂时就隐藏。


图6.22

在板中使用“笔”工具画出如图6.22所示的路径。

在“交互”窗口的“对象和时间轴”面板中单击“sanmao”层中的图标,让“sanmao”层显示出来,如图6.23所示。


图6.23

并单击“sanmao”层选中角色,选择菜单:“对象 > 顺序 > 上移一层”命令。

然后打开“属性”窗口,找到“转换”面板,然后点击“缩放”项项卡,打开缩放控制界面。如图6.24中所示,并把X和Y的值进行设定,使画面中的大小适合路径中的大小。当然这里还有“倾斜、旋转、移位…”操作,可以灵活的试试。


图6.24

在“工具框”中选择选择工具,单击选中添加到场景中的元件,并拖动到右上角边的位置。如图6.25所示。


图.625

接着6.2节中步骤继续操作,打开交互窗口中“对象和时间线”面板,单击“Silverlight 创建动画图标按钮”,弹出图6.2.1所示界面。
Expression Blend创建动画对话框
图6.2.1
名称(关键字)输入“run ”,单点“确定”按钮后会进入“Run”动画的编辑状态。把时间线移到0:00.5000位置,选中“sanmao”层,在“属性”窗口中找到“转换”面板,单击“转换选项卡”转换选项卡,将Y的值设为“256”。如图6.22所示界面。
Expression Blend 转换面板
图6.22
目前效果如图6.23的示。
Expression Blend 动画
图6.23
现路径动画
在“交互”窗口中“对象和时间线”中的时间线移动到0:01.000位置。选中“sanmao”层,可以使用鼠标拖动角色中间的圆点,这时的属性窗口中的“转换面板”里,选择“中心点”选项卡,分别X为“-0.533”和Y为“0.633”。如图6.234所示。
Expression 中心点
图6.234
然后当鼠标移动到角色的左上角外面周围变成Expression blend 旋转鼠标时,点击拖动。或在属性面板中的“转换”面板中切换到“旋转”面板,将Angle设为“183.661”,效果如图6.235界面所示。
Expression 变形教程
图6.235
按着以上方法,使用移动的方法将移动画的方法将后面的路径动画完成^^下载示例文件

6.3. 颜色动画
如果还继续6.2节中的操作,选择菜单:“文件 > 关闭项目”命令完成上一个程序!
选择菜单:“文件 >新建项目”命令,选择项目类型为“Silverlight2应用程序”,名称设为“zhezhao”,语言设为Visual C#,位置随意,如图6.31所示。
Expression Blend 新建项目
图6.31
单击“确定”按钮,进入项目的编辑主场景的状态,选择工具框中“矩形”工具,绘制矩形,如图6.32所示。
Expression 矩形
图6.32
单击“交互”窗口中“对象和时间线”面板中“”图标,名称为“Animation1”并点击确定,创建一个动画。然后将“时间线”移动到0:01.000位置后,使用选择工具,单击绘制区的矩形为选中状态,打开属性面板,将其中Fill设为红色。如图6.33所示。
Expression Blend 填充颜色
图6.33
6.4. 遮罩动画制作
接着6.3节续继操作,单击”交互“窗口”对象和时间线“面板中”关闭Storyboard“图标,取消当前动画的编辑状态。在绘制区中选中矩形,打开属性窗口中的画笔面板中选择”OpacityMask“蒙版颜色,然后点击”渐变画笔“选项卡,单击“径向渐变”,如图6.41中所示。
Silverlight 教程
图6.41
单击“交互”窗口中“对象和时间线”面板中“图标”,在列表中单击“Animation1”项,进入“Animation1”的编辑状态。将“时间线”移动到0:02.000位置,单击第一个颜色滑块,将A(透明度)设为0%,如图6.42。
silverlight 遮罩动画
图6.42
在“交互”窗口中“对象和时间线”面板中,将时间线移动到0:03.000位置。把每二个颜色滑块的A(透明度)设为0%。点击“播放”按钮查看效果。

Silverlight对象资源:入门篇

什么是对象Resources(资源)

Silverlight 教程之Resources对象资源

对象资源是为了对象重用,使用了面向对象的逻辑,使得改一更百的效果。对象资源其实就是一个对象,比如100是一个数字类型的对象,当二个矩形的宽都使用了100这个对象资源时,其两个矩形的宽是100。当更改100对象资源为200后,己应用100的对象资源的矩形的宽同时更新成200。

示例:对象资源的应用

打开Expression Blend 2应用程序,选择菜单:“文件
> 新建项目”命令,弹出图1所示窗口。


图1

设置“选择项目类型”为“Silverlight2应用程序”,输入名称单击确定进入设计界面。在美工板上绘制三个矩形,如图2中所示。


图2

创建对象资源

选择第一个矩形,使用“窗口
> 属性”命令打开属性窗口,将画笔面板中的Fill(填充)颜色设为“#FF3AFF00”(绿色)。单击“将画笔转换为资源”按钮,弹出“创建Brush资源”窗口,如图3所示。


图3

输入名称(关键字)为“GreenColor”,定义位置为“应用程序”。单击确定。

请注意:定义位置表示对象资源所使用的范围,“应用程序”表示整个项目中所有位置都可使用,“本文档”,列表中
“UserControl:…”第一个表示当前文档,向下选择,表示只在某个子控件中才可使用!

将画笔面板中的Strock(边框颜色)设为“#FFFFD900”黄色。单击“将画笔转换为资源”按钮,弹出“创建Brush资源”窗口,“名称(关键字)”设为“YellowColor”,定义位置为“应用程序”,单击确定。

在属性窗口中找到Width(宽),将值设为“136”,单击其右边的“高级属性”图标,在菜单中选择“转换为新资源”,如图4所示。


图4

在弹出的“创建Brush资源”窗口中, “名称(关键字)”设为“矩形统一宽”,定义位置可选择“应用程序”。单击确定。

找到Width下面的Height,将值设为“56”,单击其右边的“高级属性”图标,在菜单中选择“转换为新资源”,在弹出的“创建资源”窗口中,“名称(关键字)”设为“矩形统一高”,定义位置可选择“应用程序”。单击确定。

小结:所创建的资源有:“GreenColor、YellowColor、矩形统一宽、矩形统一高”,下面就要使用这几个对象资源了。

应用对象资源

选择第二个矩形,使用“窗口
> 属性”命令打开属性窗口,找到画笔面板中的Fill(填充)颜色项,单击其右边的“高级属性”图标,在弹出菜单中选择“本地资源 > GreenColor”,如图5中所示。


图5

选择Stroke(边框)颜色,选择“画笔”选项卡,在“本地Brush资源”列表中选择“YellowColor”,如图6所示。


图6

相同的方法找到Width属性,单击其右边的“高级属性”图标,在弹出菜单中选择“本地资源 > 矩形统一宽”,将Height设成“矩形统一高”。选择第三个矩形,使用和第二个矩形一样的方法,Fill(填充)颜色设为“GreenColor”,Stroke(边框)颜色设为“YellowColor”,Width(宽)设为“矩形统一宽”,Height(高)设为“矩形统一高”。

设置对象资源

选择菜单:“窗口 > 资源”命令,打开“资源”窗口,如图7所示。


图7

单击App.xaml左边的图标,显示出我们添加的所有资源信息,如图8所示。

图8

单击GreenColor右边的下拉按钮,并选择颜色为红色,这时会同时更新所有使用GreenColor对象资源的属性都变为了红色。

Silverlight对象资源:控件模板(Template)

什么是“状态模板”?

模板皮服与样式大为不同,如果把样式为化妆,而模板就是为控件带上面具。因为更换模板后可以让控件的指定完全更变显示内容,这因控件的不同“状态”也有所不同。Silverlight 运行库中有很多控件支持模板换服功能,比如:“Button, Slider,CheckBox,RadioButton…”等。

Silverlight 运行库中常用模板控件
控件名 说明
TextBox 文本框
PasswordBox 密码输入框
Button 按钮
CheckBox 复选框
RadioButton 单选框
ComboBox 下拉列表
ListBox 列表控件
ScrollBar 滚动条控件
Slider 滑块调节控件
DataGrid 数据表格控件
模板控件的常用状态表
状态名称 说明
Base 基础状态,用与创建元素。
Normal 默认状态,所在Button 控件中。
MouseOver 鼠标指针悬停在控件上。
Pressed 控件已按下。
Disabled 控件被禁用。
Focused 控件具有焦点。
Unfocused 控件不具有焦点。
Checked 应用于CheckBox控件,当IsChecked 属性为为true时,使用当前状态。
Unchecked 应用于CheckBox控件,当IsChecked 属性为为false时,使用当前状态。
Normal AlternatingRow 具有奇数编号索引的行的默认状态。
Normal Selected 当选中行时触发的状态。
Unfocused Selected 当行处于编辑模式且 DataGrid 丢失焦点时触发的状态。
MouseOver Selected 当选择了行且鼠标指针悬停在该行上时触发的状态。
为CheckBox复选控件整容【示例】

示例效果

一、创建基础组件

1、选择菜单:“文件 > 新建项目”命令,在弹出的“新建项目”窗口中选择“Silverlight应用程序”,名称设为“mode1”,并点击确定。

2、在工具框中选择“CheckBox控件”,在美工画板中绘制一个大小为197×241的控件,如图1所示。

CheckBox 控件
图1

3、选择“笔”工具,在美工板中绘制一个大小为197×241的小树。然后将绘制的路径选中,使用菜单“对象 > 分组 > Canvas”,将其进行如组。如图2中所示。

Silverlight 小树
图片2

二、创建模板

1、选中在美工板中创建的CheckBox控件,选择菜单命令:“对象 > 编辑控件部件(模板)> 创建空项”,弹出“创建ControlTemplate资源”窗口,如图3所示。

Silverlight “模板”创建
图3

这时将“名称(关键字)”设为“tree1”,并点击确定。

2、使用菜单命令“窗口 > 交互”命令,显示和隐藏“交互”窗口,这时状态面板如图4所示。

Silverlight 状态
图4

当前选定的状态为“Base”,是最基础的状态,下面FocusStates、CheckStates、CommonStates都在此状态之上进行改变。

这时,我们己为CheckBox的默认面貌全部摘下!现在要是按F5测试运行,则发现是一算空白,下面我们将会为CheckBox的选中和无选中的状态时,有新的界面出现,换上新的服装。

三、设置CheckBox控件“无选状态”模板的动画

1、在美工板中选择“小树”,选择菜单:“编辑 > 剪切”命令。

2、选择空白的CheckBox控件,选择菜单:“对象 > 编辑控件部件(模板)> 编辑模板”。

3、选择菜单:“编辑 > 粘贴”,在属性面板中的Margin属性Left、Top、Right、Bottom全设为0。

4、在“交互 > 状态”面板中选择“UnChecked”项,如图5所示。

Silverlight 图5
图5

5、单击”对象和时间线“窗口下的“显示时间线”显示时间线按钮按钮,拖动时间针到0:00.500的位置。美工板中,使用鼠标双击小树,进入小树的组的编辑状态后,选中第一个叶子,拖动叶子的角将叶子变小,其它叶子同样使用指针选择并拖动边角的方法缩放,如图6中所示。
Silverlight Template 教程
图6

四、设置CheckBox控件“选中状态”模板的动画

1、在“交互 > 状态”面板中选择“Checked”项,如图7所示。

CheckBox控件的checked状态模板
图7

2、单击”对象和时间线“窗口下的“显示时间线”显示时间线按钮按钮,拖动时间针到0:00.500的位置。美工板中,使用鼠标双击小树,进入小树的组的编辑状态后,选中第一个叶子。打开属性窗口,在转换面板中,将“转换”选项卡中的X,Y中的值设为8(可任意,只要不和原值一样就可),然后再设成原值,其意是创建关键针记录原位置。转到“缩放”选项卡,将X和Y中的值设为8(可任意,只要不和原值一样就可),然后再设为原值。这种方法同样应用到其它的叶子,如图8中所示。

Silverlight 教程 小树
图8

3、在“交互”窗口中“对象和时间线”面板中单击“返回到[UserControl]范围”Silverlight 图像资源按钮,取消模板的编辑状态。

五、模板重用

1、在工具框中选择“CheckBox控件”checkbox.bmp,在美工画板中绘制一个大小为197×241的控件。

2、选择菜单:“对象 > 编辑控件部件(模板) > 应用资源 > tree1”。即可,效果如图9所示。


图9

3、按F5查看效果,点击小树看看效果吧~

Silverlight对象资源:样式(Style)

介绍

样式Style用与定义某类控件的属性设置集合,创建一个样式以后,可应用到多个控件上。而一个控件使用一个样式。例中:创建了一个Button(按钮)类型的样式,并将这个Button样式的ForeColor设为红和FontSize设为30后,引用此样式的Button按钮都会将ForeColor默认值设为红,FontSize默认值设为30了(如果引用的样式中和控件中同时定义了属性值,会使用控件中设的值)。

创建样式

1、 选择菜单:“文件 > 新建项目”命令,在弹出的“新建项目”窗口中选择“Silverlight应用程序”,名称设为“style1”,并点击确定。
2、 在美工板中绘制三个矩形,如图1所示。

图1
3、 选中第三个矩形,然后选择菜单“对象 > 编辑样式 > 创建空项”命令,弹出“创建Style资源”窗口,如图2所示。

图2
将“名称(关键字)”设为“modelRec”,并点击确定。这时Expression Blend自动创建了样式,并进入样式的编辑状态。
4、 将Fill(填充)颜色设为“#FFFFF65A”黄色,和Stroke(边框)色设为“#FFB3FF56”鲜绿色。Width(宽)设为156,Height(高)设为76。
5、 选择菜单“窗口 > 交互”命令显示出交互窗口,在“对象和时间线”面板中点击按钮退出Style(样式)的编辑状态。如图3所示.

图3
1、 选中第二个矩形,选择菜单“对象 > 编辑样式 > 应用资源 > ModelRec”命令,使得第二个矩形也和第三个矩形一样的颜色和边框和大小。
2、 打开属性窗口,将属性右边的“高级属性选项”按钮,弹出菜单中选择“重置”。同样的方式,将属性右边的“高级属性选项”按钮,弹出菜单中选择“重置”。将属性右边的“高级属性选项”按钮,弹出菜单中选择“重置”。将属性右边的“高级属性选项”按钮,弹出菜单中选择“重置”。
3、 选择第一个矩形,重复第和第步的操作,如图所示效果。

图4

编辑样式

1、 选择菜单“窗口 > 资源”命令,打开资源窗口,点击图标展开Page.xaml > UserControl后,如5所示。

图5
2、 单击ModelRec右边的“编辑资源”按钮,进入“ModelRec”样式的编辑状态。
3、 这时进入了一个按钮复本的样本编辑界面,您可以任意更改属性面板中的值。使得改这一样式,而改多个控件的目的。

Bookmark and Share

silverlight扫盲篇

This item was filled under [ silverlight ]

from:http://silverlight.jc.jishu.me/

了解WPF技术历史

1985~1991年:C搭配Windows API。目前我们已很少用C和Windows API写程序了,但还是有必要熟悉这样的技术,因为有些特殊的时候会用到。

1992~2001年:C++搭配MFC链接库(这段时间也是Visual Basic最风光的时候)。在历史上MFC是最多人用的Windows编程方法。但MFC技术终于该淡出历史了!

2002~2006年:C#搭配Windows Form。这段期间IT技术的焦点是在Web上,所以虽然大家都在用.NET,但真正的主角是ASP.NET,而不是Windows Forms。Windows Forms还没等熬出头,WPF就出现了!

2007~2009 :C#搭配WPF for Framework 3.5。你可能觉得很奇怪,微软为何释出两个作用相似,却不同且不相容的.NET API。因为时代的改进,用户对视觉感受需求不断提高。因为WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。而Winform GDI+是旧版本留下的吧!

Silverlight与WPF关系

相似之处要说到来源
这得说起Silverlight的起初了,曾经Silverlight叫WPF/E是WPF跨平台的一个代号。WPF指的是.NET Framework3.0技术的一个新曾技术,在Vista应用中得到了支持,当然也就影响面大了!WPF/E是Windows Presentation Foundation/Everywhere缩写,其意指Everywhere指的是跨平台意思,使得在每个操作系统中可以运行WPF,技术使用的的浏览器插件(Plus)技术。在正式版WPF/E 1.0时,正式命名为了Silverlight(银光)。

 不同之处见其核心
 要说跨平台,需要不受.NET Framework的依赖。微软的架构师不会把这么不安全的WPF万能核心搬到浏览器插件中,然后就提取(或说重新开发)了一个精简的.NET Runtime Library到了WPF/E中来执行XAML、xap、dll类库等文件,可叫其Silverlight Runtime Libray!所以核心从本质上分开!说其关系道不如说兄弟关系乎?

网友一句,明了简单!
snowman曰:“WPF是Windows应用程序,而Silverlight是网页中的动画应用 -_-”.

Silverlight开发环境安装/配置

目前最新的Silverlight版本为2.0 Beta版本,由于Silverlight的开发需要很多工具的支持!所以在此进行详细介绍,让更多的朋友更快的入门。

一、试用 Visual Studio 2008
官方下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=D95598D7-AA6E-4F24-82E3-81570C5384CB&displaylang=zh-cn
简要说明:用于程序的开发,包括程序的逻辑代码。程序的架构设计和WEB的的开发。

二、Visual Studio 2008 sp1
官方下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=27673C47-B3B5-4C67-BD99-84E525B5CE61&displaylang=zh-cn
简要说明:Silverlight 2 SDK Beta 2 和 Silverlight Tools Beta 2。(如果已安装 Silverlight Tools Beta 2,则在安装 Visual Studio 2008 SP1 后,必须升级 Silverlight Tools Beta 2。若要执行升级,请使用位于 Microsoft 下载中心网站上的 Silverlight Tools Beta 2 页上的安装程序。)、MVC 预览版本 #3、ASP.NET 扩展/动态数据预览、VC 2008 功能包、VB PowerPack 控件(2.0 和 3.0)、Expression Studio 2 (RTM)、SQL Server 2008、.NET Framework 3.5 SDK、XSLT 探查器、VSTA 2.0 SDK、Visual Studio 2008 SDK

三、.NET Framework 3.5 Service park 1
官方下载地址:http://www.microsoft.com/downloads/details.aspx?familyid=ab99342f-5d1a-413d-8319-81da479ab0d7&displaylang=en
.NET Framework 更新补定

四、Silverlight Tools For Visual Studio 2008 sp1
官方下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&displaylang=en
简要说明:安装此开发包,就可以Visual Studio 2008开发Silverlight支持了

安装注意事项:在安装新的Silverlight2.0版本时请注意卸载旧的Silverlight版本,以便产生版本冲突问题!

五、Expression Blend 2.5中文版
官方下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=5ff08106-b9f4-43cd-abad-4cc9d9c208d7
简要说明:用于XAML的可视化设计,包括动画的可视化设计和控件设计!包括在Expression Studio中。

六、Expression Blend 2.5 sp1
官方下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=EB9B5C48-BA2B-4C39-A1C3-135C60BBBE66&displaylang=en
安装说明:升级Expression Studio 2.0 Silverlight2.0开发。

七、Expression Design2中文版
官方下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=369b8681-57f9-49e9-a585-ecc5cac40959
简要说明:用于Silverlight元素的设计和位图失量图片的设计,可以直接到处为XAML。

八、Expression Media2

官方下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=cd359e7d-fd27-4901-baff-6d564cfbd700
简要说明:用于视频、音频的处理!

八、Deep Zoom Composer – English

官方下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=457b17b7-52bf-4bda-87a3-fa8a4673f8bf&DisplayLang=en

使用Silverlight技术制作图片展示的工具。结合Live.com的在线发布功能!

Silverlight文件格式

后缀名称 说明
.xaml 可视化设计的代码文件,由Expression Blend可视化编辑,文本格式,使用Xml为语法规则。
.xap 使用Silverlight编译器创建,其中包含.dll、.xaml、图片等资源文件,通过zip方式压缩成独立文件。文件中有自己的入口,使silverlight客户端执行!
.sln 解决方案文件,是由多个或一个项目组成。
. csproj C#语言编写的项目文件。一个项目生成一个dll或xap文件。

Silverlight版本

Silverlight1.0正式版发布时正式命名为Silverlight,其在网页上指定的数据源是.xaml文件,并支持很多图形、布局、文本输入等控件。1.0时只支持Javascript脚本调用Silverlight 加载的.xaml数据中的控件。而这才算是微软的WPF技术经踏入WEB第一步!

Silverlight2.0正式发布后,支持了,支持.NET framework类库。并且霸有了所有.NET程序员的支持。使而不用苦恼再次学Flash的ActionScript 另一种语言了。控件和类库的类库都相应更新和淘汰旧的成员。让程序性能得到了更一步更新。这才是为3.0做的飞跃时的下蹲。

Silverlight2.0最新特性

Beta2加了许许多多的新功能(下面有更多细节),但下载大小仍只有4.6MB大,在机器上安装所花时间少于10秒,不用安装.NET框架或其他任何软件就可以工作,所有的功能在Mac和Windows机器上都能跨浏览器工作,这些功能在Linux上将由Moonlight   2提供。

Silverlight 2 Beta2支持一个go-live许可,它允许你开始使用和部署Silverlight   2于商业应用中。在Beta2与最终版间,会有一些API变动,所以你应该预期你用Beta2编写的应用在最终版出来时需要做些更新。但我们认为这些变动将是直截了当和比较容易的,你现在可以开始计划和着手开发商业项目了。

你可以使用Silverlight之VS 2008工具和Expression Blend 2.5六月份预览版来开发Silverlight   Beta2应用,Silverlight之VS 2008工具在VS 2008和最近发布的VS 2008 SP1 beta下都工作。

UI及控件方面的改进

更多内置控件

Beta 1的核心Silverlight安装只包含了几个控件,最常用的控件(包括Button, ListBox,   Slider等)都是在另外的程序集中发布的,你需要在应用中将这些程序集捆绑发布(其结果是增加了应用的下载大小)。 作为核心Silverlight   2下载的一部分,Beta 2 现在将安装30多个最常用的控件,这意味着你现在可以开发使用这些核心控件的Silverlight   2应用,其下载大小可以只有3kb那么大,- 使得Silverlight应用的下载大小很小,并使得应用启动极快。

除了包含在基本Silverlight   2安装中的核心控件外,这个星期我们还将发布在另外的程序集中实现的其他高层次的控件,你可以在应用中引用和包含它们。这包括象DataGrid(其Beta2的新特性见下面),日历(Beta2中有多日选择和不可选日期的支持),以及TabPanel(Beta2中才出现的新控件)这样的控件。

控件模板编辑支持

WPF和Silverlight编程模型最强大的一个功能是其完全定制控件的观感的能力,这允许开发人员和设计师以微妙和戏剧性的方式对控件的UI进行精雕细琢,促成巨大的灵活性。这个星期的Expression   Blend 2.5六月份预览版现在对控件模板编辑加了设计器支持,将方便你快速地改变任何控件的外观,而不必再屈尊去修改XAML源码。

Visual State Manager (VSM-视觉状态管理器)   之支持

Silverlight 和   WPF中的控件模板支持对控件的“look(外观)”,以及控件的“feel(感觉)”的定制。“feel”之谓,我指的是改变它交互的响应性。例如,在按下时,得到焦点时,失去焦点时,处于按下的状态时,处于不可用(disabled)状态时,内中有东西被选中时。。。,它是如何反应的。经常地,在用户象这样与控件做交互时,你要执行动画效果。

我们在Silverlight 2 Beta2中引进的一个新东西是"Visual State Manager(视觉状态管理器)"   (VSM),该功能将极大地方便你建造交互性的控件模板。VSM引入了你可在控件模板中利用的2个基本概念:"视觉状态(Visual States)" 和   "状态迁移(State Transitions)"。例如,象按钮这样的控件为自己定义了多个视觉状态: "Normal(正常)",   "MouseOver(鼠标之下)", "Pressed(按下)", "Disabled(不可用)", "Focused(获取焦点)",   "Unfocused(不具焦点)"。在Blend中的模板编辑模式下,设计师现在可以轻松地编辑按钮在每个特定状态下的外观,以及设置迁移规则来控制从一个状态迁移到另一个状态时动画效果应该运行的时间。然后在运行时,Silverlight会动态地运行合适的动画故事板来把控件从一个状态平滑地过渡到另一个状态。

这个模型很棒的地方是,设计师用编写代码,用手工创建动画故事板,也用理解控件的对象模型就可以非常有效率。这使得学习创建交互性控件模板的曲线非常容易,意味着现有的美工可以轻松地参与Silverlight项目。今年稍后,我们还将往WPF中添加"Visual   State Manager(视觉状态管理器)" (VSM)的支持,让你在Windows应用中使用同样的方法,以及在 WPF 和 Silverlight   项目间共享控件模板。

TextBox

Beta2包括了对内置的TextBox编辑控件的一些非常重大的改进,现在支持带换行的文本卷动,多行文字选择,文档导航键,以及从剪贴板的拷贝/粘贴等。Beta2现在还包含了对非西方字符集的IME   Level 3输入支持(包括候选窗口选择):

输入支持

Beta2添加了全屏模式下额外的键盘支持(箭头键,tab,回车,home,end,上一页/下一页,空格键)。注:为避免密码欺骗场景,目前尚不允许完整的键盘输入支持。Beta2还加了新的APIs支持墨印和笔触输入。

UI自动化和可访问性(Accessibility)

Beta2在Silverlight中添加了UI自动化框架支持,UI自动化(简称为UIA)允许屏幕阅读器和其他辅助性工具识别组成你的Silverlight   2应用的组件并与之进行交互。Beta2使用了UIA框架,对一套Silverlight控件加了基于UIA的行为。在Silverlight   2的最终版本中,所有的控件都将内置拥有基于UIA的行为。我们还将支持高对比度的场景。这些功能将允许你建造可访问的,兼容section   508的应用。这个UIA支持还将促成对应用的自动化UI测试。

动画和图形系统动画和图形系统

Beta2加了对自定义依赖属性的动画支持,现在也支持对象动画支持(对结构体的动画效果)。Beta2还支持在代码中创建Storyboard来对部分显示树执行动画效果,而不用将Storyboard加到显示树中(允许你将动画效果完全嵌在代码中),每帧动画的回调支持将加在最终版中。

Beta2包含了一个新的视觉树静态辅助类,提供了高级的视觉树检视APIs。它提供了象这样的功能:   枚举某个元素的子元素,获取某个给定参考元素的祖先/父元素。这些APIs可以操作你传人的任何UIElement对象。

DeepZoom

Beta2现在支持基于XML的DeepZoom集合的Manifest文件,Beta2还对DeepZoom加了可扩展的MultiScaleTileSource支持(允许开发人员连接到与Deep   Zoom高性能显示所用格式不相符的的现有的金字塔结构的图片集合上)。

WPF兼容性

Silverlight   Beta2包含了许多许多的缺陷修补/改动,以改进Silverlight和WPF间的API兼容性(注:Silverlight的最终版还将包含一些额外的兼容性工作)。我们还将在今夏把在   Silverlight 2中引进的一些新APIs加到.NET 3.5 SP1中的WPF中。

多媒体方面的改进

自适应流媒体传输(Adaptive Streaming)

Beta2加了对“自适应流媒体传输(adaptive   streaming)”的支持,它允许你以多种比特率编码媒体,然后由Silverlight应用根据网络和CPU条件动态地在它们中间切换。

这将促成极其丰富的终端用户媒体体验,因为它造成了这样的可能性,由内容提供商同时提供低端和高端比特率版本的录像,而由Silverlight根据终端用户的机器硬件和网络容量选择使用最佳的版本。假如在观看录像期间,机器或网络条件改变的话,   Silverlight 可以自动地切换到更合适的比特率,而不用任何缓存或造成中断性故障。

Silverlight对自适应流媒体传输(Adaptive   Streaming)的支持是可扩展的,允许任何人接入他们自己的逻辑来控制媒体内容的来源,应该使用什么比特率等。这意味着,任何CDN(内容发送网络)或媒体交付供应商可以轻松地与Silverlight集成,发送超高质量的录像。

内容保护

Beta2包含了DRM内容保护,支持Windows DRM和PlayReady DRM,两者都能跨浏览器和跨平台工作。

服务器端的播放列表

Beta2加了对服务器端播放列表的支持(以前的版本只支持客户端播放列表)。

Networking方面的改进

Silverlight 2 Beta2包含了一堆networking方面的工作: 跨域Sockets Beta2现在允许跨域的HTTP和Sockets的networking支持(意味着你的应用可以调用不同于当前应用下载自的站点的网站)。 Silverlight会查看目标服务器上是否存在这样的XML策略文件,这文件表明了是否允许跨域网络访问。Silverlight支持一个我们开发的新XML策略文件格式,以及Flash策略文件(意味着可为Flash所用的现有的网站,不用费额外的功夫,就可在Silverlight中调用)。 后台线程Networking Beta2现在允许Silverlight应用在后台线程上开始网络请求,以及在后台线程上处理网络回复。这将促成一大堆非常强有力的场景,允许你在做HTTP和Socket网络通讯时,避免阻塞浏览器的UI线程。 双向通讯(服务器推送) Beta2支持与服务器上的WCF服务建立双向信道(duplex communication channels),这将促成一个非常干净的编程模型,允许服务器将消息“推送”到Silverlight客户端,而不用开发人员手工轮询服务器端的变动。这个编程模型在多种场景中都非常有用,包括即时消息/聊天应用,象股票行情和交易这样的监测/更新应用等。 Web服务 Beta2还显著改进了与基于SOAP的web服务间的互操作,Web服务代理类端点URL现在不用重新编译应用就可配置。Visual Studio现在还有一个新的“Silverlight-enabled WCF Service(启用了Silvelight的WCF服务)”项目模板,你可以将其加到ASP.NET web项目中,将服务发布到客户端。 REST和ADO.NET数据服务 Silverlight包括了对操作基于REST的web服务的支持。 Beta2加了对调用和消费ADO.NET Data Services(以前的代号为“Astoria”)的支持,ADO.NET Data Services将作为.NET 3.5 SP1的一部分发布,将便利在 ASP.NET web项目中发布可为任何使用REST URIs的客户端所消费的数据端点。 Silverlight Beta2 现在包括了 ADO.NET Data Service 客户端支持,这些支持允许你轻松地调用这些服务(还可以在Silverlight中使用LINQ表达式来表示这些服务的远程REST查询)。 JSON Silverlight支持调用网上的基于JSON的服务。 Beta2现在还包括了LINQ to JSON支持,允许你在Silverlight应用中轻松地查询,过滤,并将JSON结果映射到.NET对象上,这方便了对已经发布在网上的现有的AJAX端点和服务的调用和操作。

数据方面的改进

Silverlight 2 Beta2 包括了数据方面的一堆工作: DataGrid Beta2给DataGrid控件加了若干个新功能,这些功能包括:
  • 行与列的高宽自动调整(Auto-sizing)支持
  • 按列排序(单列和多列排序支持)
  • 对终端用户重排纵列顺序(Column re-ordering)的支持(允许他们拖放纵列来重新安排顺序)
  • 固定列(Frozen column)的支持(允许你防止某个特定列的定制)
  • 性能和缺陷修补
数据绑定 Beta2加了更多核心的数据绑定功能以及更好的验证支持,这些包括:
  • 控件上每个绑定的Validation和BindingValidationError事件处理支持(允许你用TwoWay绑定来处理输入验证)
  • 对附加属性(attached properties)绑定表达式的支持
  • 更丰富的绑定值转换支持(包括值转换后备支持(fallback support))
隔离储存(Isolated Storage) Silverlight允许应用将数据保存在客户端(通过我们称之为“Isolated Storage”的特性),应用可以提示用户授予它们改变该储存大小的权限(例如,一个用户也许会准许一个email程序50MB的本地存储)。 Beta2将提供给Silverlight应用的默认本地存储空间的大小增加到了1MB, Beta2现在还对管理每个网站的存储权限提供了更好的终端用户支持,以及轻松取消/删除应用的本地存储的能力。控制这些的管理UI现在可以由终端用户右击Silverlight应用,选择“Silverlight Configuration(配置)”菜单选项来调出来。

理解与Silverlight 1.0和Silverlight 2 Beta 1间的兼容性

Silverlight 2 Beta2与针对Silverlight 1.0的应用是兼容的。 Silverlight 2 Beta2 运行不了针对 Silverlight 2 Beta1 的应用, 因为,为了加入Silverlight 2的新功能,我们在两个beta版本间做了若干个API变动。安装了Silverlight 2 Beta1的浏览器在访问宿主了Silverlight Beta2应用的网站时,会提示升级到新的Silverlight beta版本。升级之后,不卸载Beta2的话,是无法再运行Beta1应用了。这意味着,如果你已经在网上发布了用Beta1开发的应用的话,你大概要尽快将其升级到Beta2。 原文地址:Scott Guthrie's Blog on ASP.NET and .NET
Silverlight 3.0虽然还没有发布,最新消息证明,微软将会支持硬件加速和3D技术。
Bookmark and Share

Silverlight 3官方范例以及广告创作工具包发布

This item was filled under [ silverlight ]

一个是Silverlight 3官方的在线范例

具体的访问地址如下

http://samples.msdn.microsoft.com/Silverlight/SampleBrowser/index.htm

其更新了部分Silverlight 3的新特性的范例

SL3Beta_01

SL3Beta_02

此外微软承诺在Silverlight 3正式发布的时候将发布其所有控件以及范例的源代码供大家参考

更多的详细情况可以参见The Silverlight Documentation Sample Browser

其外还发布了基于Silverlight的广告创作工具包(The Silverlight Advertisement Creation Kit)

主要包括一个指导的文档以及一系列的示范代码工程文件

讲解的内容包括:

  • Creating Polite Ads(创建不烦人的广告)SL3Beta_05
  • Tracking Actions(跟踪操作)
  • Ad synchronization(广告同步问题)SL3Beta_06
  • clickTAG Support(点击标签广告的支持,也就是点击广告图片弹出新的连接到广告商的网站)SL3Beta_03
  • Expanding Ads(拉伸式广告)SL3Beta_04
  • Optimization Techniques(优化技巧)这个广告创作工具包是对去年12月发布的Silverlight Ad Publishing and Serving Guide的一个补充

    此外关于如何在Silverlight中集成广告,大家还可能参看MIX 09的两个会场的讲座

  • Silverlight and Advertising
  • Delivering Ads to a Silverlight Media Player Application
  • Bookmark and Share

    Expression Blend 3预览

    This item was filled under [ silverlight ]

    构建既吸引人又容易使用的UI应该是简单而有趣的一件事情。对于那些我们最钟情的软件产品而言,无论是我们开发的还是我们曾使用过的,我们有时候总会忍不住地想,如果它们的UI变得更简单,更易于理解和使用的话,那该多好啊。

    Expression Blend也许可以帮你做到这一点,无论你的软件产品是用WPF开发出来的富客户端桌面应用程序还是使用Sliverlight制作的基于网页的应用程序。

    最近,我们发布了Expression Blend 3的预览版。在这个版本里,我们一如既往地提供基于工作流的特性和功能。该工作流贯穿整个设计和生产活动,为我们的设计人员和开发人员提供帮助。

    在该预览版里,有几个非常有意思的功能,下面我们就来一一介绍一下:

    clip_image002

    增加交互功能无需编程

    行为模式(Behaviors)是一组可重用的代码。通过简单的拖动操作,它们可以被应用在任何的一个对象上,赋予该对象某个特定的交互特性,而设计人员无需为此编写一行代码。例如,你可以把一个名为DragMove的行为模式拖放到艺术面板(artboard)的一个按钮上,然后运行该程序。你会发现这个按钮已经可以在应用程序的窗口里被四处拖动。在下面的照片编辑应用程序里,用户可以拖动那个绿色的按钮,滑过照片的不同部位。在按钮所过之处,照片上相应位置的图像点的亮度就会被显示出来。

    clip_image004

    行为模式(Behaviors)是从WPF里的触发器和行为模式(Trigger and Action)发展而来的一种设计模式。它可以被广泛地应用在基于Sliverlight或WPF的应用程序里。行为模式(Behaviors)有多种多样的,它可以是导航(navigate),改变状态(change state),验证输入数据(validate inputs),和web服务对话,或者播放动画和音效。Blend 3内建了一系列的通用行为模式(Behaviors),从应用程序的页面导航,控件的物理模拟到播放动画效果。这些模式都提供了扩展支持,基于它们,你可以创建自己的交互特性组件。行为模式(Behaviors)和传统意义上的用户控件有很多相似性。它们既可以被定义在一个库(library)里,也可以被定义在主应用程序里。最终,它们都会被自动包含在你的程序集(assembly)里。要了解更多关于行为模式(Behaviors)的信息或者分享你自制的行为模式(Behaviors),请访问我们的Expression Gallery

    眼见为实,用数据说话

    在设计和制作程序的时候,你可能还无法访问那些将会被应用在你的程序里的真实数据。有时候,没有这样的数据会让你无法确定你的应用程序在真实环境里运行得到底好不好。针对这个问题,我们在Blend 3里增加了一项功能,允许开发人员快速地创建拟真数据。然后,通过艺术面板(artboard),开发人员就借助这些数据来对相关的数据显示控件进行定制。此外,开发人员还可以自定义是否在应用程序运行时使用真实数据来替代拟真数据:那些拟真数据的绑定关系都是储存在设计时刻(design time)的属性里的。在应用程序运行的时候,那些拟真数据可以被真实的数据所替换。开发人员也可以决定继续使用预先绑定的拟真数据,以便能在真实环境里,对应用程序进行测试。

    在创建拟真数据的时候,开发人员可以通过XML文件将数据导入,也可以选择让Blend为你生成数据。生成的数据是可以订制的,也可以包含二维集合、多维集合、字符串、数字、布尔值,和图像。当将数据项拖放到艺术面板上时,Blend 3会分析数据的值,并选择显示数据的最佳方式。比如说,如果数据项是一个图像文件的路径,那么Blend 3会显示这幅图像;如果数据项是一个图像文件路径的集合,那么Blend 3就会创建一个图像的列表框(list box)。

    clip_image005

    支持业界标准,共建生态系统

    Blend 3预览版已经开始支持导入Photoshop (.psd)和Illustrator (.ai)文件。那些文件里包含的层(layers)信息在导入后,将做为独立的布局容器(layout containers),以方便使用。譬如,向量层(vector layers)在导入后,以向量(vectors)表示;文字层(text layers)在导入后,以文字(text)表示,并带有完整的字体信息;而梯度(gradients)在导入后,则还是以梯度(gradients)来表示。此外,开发人员还可以把一个Photoshop文件导入Blend 3,然后通过新的基于状态的控件皮肤生成功能,轻松地把导入的信息转化成控件皮肤。

    clip_image007

    通过TFS进行协作

    Expression Blend 3现在已经和Microsoft©Team Foundation源代码控制系统集成在了一起。这意味着,开发人员可以轻松地在开发团队成员之间共享项目源代码文件,并对这些文件实施源代码控制。这大大降低了项目开发中的代码管理风险——由于人为的疏忽,导致一个开发人员对某个源代码文件做出的改动被另外一个开发人员在不经意间覆盖掉。有了源代码控制系统,开发人员可以随时查看某个文件的历史版本,并把它和该文件的最新版本进行比较,找出改动发生的地方。

    clip_image008

    以上列出的仅仅是我们在Blend 3里所提供的一部分重要功能。

    请访问我们的“What is new”页面,了解更多关于Blend 3的新功能以及有哪些现有功能得到了改进和增强。

    你也可以下载此预览版,并访问Expression团队的博客。此外,我们还制作了一系列的视频,帮助你获得更多关于Blend 3的使用小贴士。

    · The Future of Expression Blend

    · Integrating Expression Blend with Adobe Creative Suite

    · Creating Interactivity with Expression Blend

    Namaste!

    Bookmark and Share

    传说Silverlight 3将提升4成浏览效能

    This item was filled under [ silverlight ]

    微软的Scott Guthrie在Mix 09台上谈论Silverlight 3。以设计为焦点的开幕式结束后,Mix 09与会者的讨论,也随着微软副总Scott Guthrie上台报告,转向更技术面的话题。
    Guthrie先发表几项不同的网络工具,接着话题转向Silverlight和Silverlight 3。他表示,目前为止,Silverlight的安装人次达3.5亿,而微软相信,锁定SilvMerlight的开发者有30万人。
    Silverlight 3新特色之一,是能指定计算机的绘图处理器,为影片(PC和Mac)提供硬件加速。微软已在18日稍晚发布Silverlight 3 beta版,该产品的某些部分则早在网络上流传。
    NBC的Perkins Miller也上台宣布,该电视网将使用微软的Silverlight技术,为2010年在温哥华举办的冬季奥运,提供720p高画质串流转播。Miller说,这项技术还可暂停和倒转现场的电视画面播送。
    在介绍新版Silverlight之前,Guthrie请出Netflix网络工程副总Kevin McEntee。他表示Netflix在1年前开始考虑用Silverlight支持Mac和更多浏览器。
    McEntee说:” 有20%想要串流Netflix电影的使用者办不到,只因为我们不支持Macintosh和Firefox。 ” 最后,Netflix的串流播放器全部改用Silverlight,让他们能以单一播放器横跨多种浏览器和计算机。
    McEntee表示,另一个好处是该公司不必在每次更新播放器时,制作一个新安装程序。过去,Netflix每次更新都要求使用者重新安装软件,造成20%的使用者不能或不愿配合。该公司因而将更新频率紧缩在一年一次,创新能力也受限。McEntee说:” (现在)我们每两周就有新东西。 ”
    至于其它产品,微软发表了新版的Expression网络工具,其中包含一项”SuperPreview”功能,能让网页设计师预览其网页在不同浏览器的样子(进入云端服务,还可预览不同平台的浏览器呈现)。微软还制作了一个免费、独立的SuperPreview,供使用者比较同一个网页在IE 6、IE 7和IE 8的呈现有何不同。
    Guthrie也透露几项Windows Azure的新消息,重申Azure平台的最终版会在2009年底完成。增加的功能包括Fast CGI支持,这代表Azure未来除微软的.Net程序之外,还可执行PHP应用程序。
    Guthrie提供三项有关Silverlight 3的新消息。新版将可用来编写在浏览器外执行的程序,PC和Mac均适用。至于推出时间,Guthrie说微软只规划一个beta,他说:” 我们会在今年稍后推出最终版。 ”
    至于Mac方面,微软也说开发者将可在Mac计算机上,用Eclipse制作Silverlight应用程序。
    Silverlight 3将改用二进制元元方式编译XAML程序代码,来提高使用者浏览网页的速度,而且透过设定就可以让Silverlight程序离线执行了。
    微软在MIX09会议发表新版Silverlight 3的测试版,新增了多项控制组件和影音绘图功能。此外,微软也改变Silverlight 3的XAML程序代码的储存方式,改用类似Flash的方法,以二进制编码文件来提高执行速度。
    为了让.NET开发者更容易开发出网络RIA应用,微软在2年前发表了Silverlight技术来和Adobe的Flash技术对抗,已有很多企业开始采用Silverlight来打造客户服务。
    为了满足RIA企业应用需要的执行效能,微软在上周释出的新版中,改变了Silverlight XAML程序代码的档案编码方式,不再使用文字格式,而是将XAML编译成二进制文件。台湾微软开发工具暨平台推广处资深应用架构技术经理李匡正说:” 新版做了很多效能优化,像程序代码编译后就可以提高速度。 ”
    新光证券已开始在内部测试环境中,改用Silverlight 3来执行电子下单系统,新光证券技术总监吴志宏表示:” 用追踪50檔股票的成交价监控网页为例,当使用者端进行浏览、换页等动作时,新版大概比2.0版快了40%。 ”
    从开发角度来看,吴志宏表示,只需要对原来用2.0版开发的程序作一些修改,升级新版后,使用者端的浏览速度就可以提升,他认为:” 值得进行升级。 ” 不过,目前他担心最终正式版的功能还会改变,所以,新光证券只进行内部测试,不会全面升级。微软表示,今年内会推出正式版。
    除了改善浏览速度外,微软在Silverlight 3.0测试版中,增加了十几项控制组件。
    例如数据表DataGrid组件、树状检视用的TreeView组件、输入自动完成的组件、处理数据呈现的DataForm组件和换页控制用的DataPager组件等。 新版也终于内建了开发者常用的数据系结(Data Binding)功能,新增的组件系结(Element-to-Element Binding)机制,可以让两个互动组件的特定属性建立连结,其中一个组件的属性改变,也会连带变更对应属性的数值,例如鼠标拖曳价格区间的滑杆(Slide)按钮时,物品清单上的数量会自动依据滑杆显示的数值,自动过滤掉不符条件的项目。
    开发者可以专注在组件之间的程序逻辑,透过系结机制进行设定,就可以让组件之间的属性信息自动同步,不需要像过去那样,得自行撰写同步的程序代码。
    新版也将RIA应用延伸到桌面系统中,微软MVP吕高旭表示:” 写好的Silverlight程序经过一些设定,就可以直接执行,不需要浏览器。 ” 此外,吕高旭补充,Silvelright 3还会在本地端档案系统中隔离出一块空间,让离线执行的Silverlight程序保存数据。
    整体而言,Silverlight 3除了强化影音效果外,也增加了更多企业应用需要的前端互动组件,离线技术也能解决RIA暂时无法联机的困扰。精诚信息多媒体产品处知识产品事业部产品经理宋志峰认为:” Silverlight的功能逐渐追上Adobe的Flash/Flex/AIR技术。 ”
    不过,宋志峰认为目前的竞争不一定是好事,” 双方不断推出新功能,有时甚至拿出工程等级的API, 但是没有包装成友善好用的接口,使用者不见得受益。 ”
    新光证券技术总监吴志宏表示,Silverlight新版让下单网站的浏览速度提高了约4成,可以提供更多实时信息。不过,他担心功能改变产生兼容问题,新光证券还是要等到正式版发表后才会采用。

    Bookmark and Share