Download presentation
Presentation is loading. Please wait.
Published byJohnny Slade Modified over 9 years ago
1
Developing with Microsoft Silverlight Mark Johnston Developer & Platform Group Microsoft UK April 2007
2
? markjo@microsoft.com www http://blogs.msdn.com/markjo
3
Agenda Overview 1.0 and 1.1 releases Scenarios How to build sites that use Silverlight XAML Graphics, Brushes, Text, Media, Transforms JavaScript Programmability Animation Tools Designer and Developer
4
Building Applications With.NET web deskt op media & RIA web deskt op
5
Microsoft Silverlight is a cross-browser, cross-platform plug-in for delivering the next generation of media experiences & rich interactive applications (RIAs) for the Web
6
Silverlight Overview Enable richer interactive web experiences Vector Graphics, Media, Animation Integrate cleanly within existing sites XML markup with AJAX JavaScript Easily incorporated within HTML pages Cross Browser and Cross Platform Enabled via small, one-time, 1.1Mb download IE, FireFox, Safari support on Windows and Macintosh systems (both Intel and PPC)
7
A few core Silverlight scenarios Media Interactive Content Experiences Rich Internet Applications
8
Media Support Built-in Audio and Video Codec Support MP3 and WMA Audio WMV video Supports downloading media via standard HTTP requests (works with any web server) Will also support broadcast/live streaming later this spring for webcasts, events, etc. Supports 720 HD video, full screen projection, and best compression in industry
9
Interactive Content Experiences Powerful vector graphics engine Device independent resolution scaling Flexible animation system Enable declarative animation of any element Declarative markup approach enables great tool integration and designer/dev workflow Easy AJAX scripting with JavaScript
10
Rich Internet Applications Future: not all features enabled in 1.1 Silverlight Alpha Rich control encapsulation model Databinding Layout managers Built-in common controls.NET Framework programming model for these scenarios
11
Media and Interactive Content Demo
12
Silverlight Consumer Installation Experience
13
Silverlight 1.0 and 1.1 Browser Host Deploy Friction-Free InstallerFriction-Free Installer Auto-UpdaterAuto-Updater Browser Host Deploy Friction-Free InstallerFriction-Free Installer Auto-UpdaterAuto-Updater Application ServicesApplication Services Presentation Core UI Core Vector Text AnimationImages UI Core Vector Text AnimationImagesInputs Keyboard Mouse Input Inputs Media VC-1 WMA MP3 Media DRMMediaDRMMedia Controls Layout Editing Controls.NET for Silverlight XAMLXAML DataMediaDataMediaWPF Extensible Controls WPF DLR Ruby Python DLR BCL Generics Collections BCL NetworkingRESTRSSSOAPNetworkingRESTRSSSOAP POXJSONPOXJSON V1.0V1.0V1.1V1.1 MS Ajax LibraryMS Ajax Library DOM IntegrationDOM Integration MS Ajax LibraryMS Ajax Library DOM IntegrationDOM Integration Friction-Free InstallerFriction-Free Installer Auto-UpdaterAuto-Updater Friction-Free InstallerFriction-Free Installer Auto-UpdaterAuto-Updater
14
.NET for Silverlight & Desktop.NET for Silverlight is a factored subset of the full.NET Desktop ~ 50 MB (Windows Only) Silverlight +.NET Alpha ~4MB (Cross platform) Additional pieces of.NET available in a pay for play model Same core development framework The shared technologies and APIs are the same The tools are the same Highly compatible Minimal changes needed to move from Silverlight to Desktop However, not binary compatible by default
15
The Sandbox All apps run in Sandbox Conceptually similar to the HTML DOM sandbox Apps run just like HTML pages – just click a URL No elevation prompts No way to get out of the sandbox Includes some additional functionality Safe isolated storage Client based file upload controls Cross-domain support in-work Presentation Title | PP | DD Month YYYYMicrosoft Confidential
16
How to build sites that use Silverlight
17
How does Silverlight Work? Silverlight is a browser control within IE and plug-in within FireFox/Safari Silverlight content can be hosted into any container element within an HTML document HTML can be overlaid on top of Silverlight content, enabling easy page blending Silverlight can be programmed using regular browser JavaScript HTML and XAML DOM elements can be manipulated in the same block of code
18
Silverlight Load Script new agHost("wpfeControl1Host", // hostElementID "wpfeControl1", // ID of the WPF/E control "400", // Width "400", // Height "#00000000", // Background color null, // SourceElement "helloworld.xaml", // Source file "true", // IsWindowless "30", // MaxFrameRate null // OnError handler ); new agHost("wpfeControl1Host", // hostElementID "wpfeControl1", // ID of the WPF/E control "400", // Width "400", // Height "#00000000", // Background color null, // SourceElement "helloworld.xaml", // Source file "true", // IsWindowless "30", // MaxFrameRate null // OnError handler );
19
What does Silverlight Point to? Silverlight load script today points to a.XAML text file to load the XAML content Future option will allow multiple XAML files, images, and media assets to be packaged into a.zip file to optimize download
20
XAML (rhymes with Camel) XAML = eXtensible Application Markup Language Flexible XML document schema Examples: WPF, Silverlight, Workflow Foundation Enables rich tooling support While still preserving good readability and hand-coding within text editors
21
XAML Sample For example: <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> </Canvas> <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> </Canvas>
22
Demo
23
Drawing with XAML You can create rich graphics using XAML Device independent vector graphics Scale from low to extremely high DPI devices XAML is made up of Tags Represent a single item or container of the design E.g. Rectangle, Ellipse, Canvas, Storyboard, etc. Not all Tags are design elements – some can also define behavior (e.g. animations) and in the future will define customization (e.g. style and data- binding)
24
Drawing with XAML (2) Basic Vocabulary of Silverlight XAML Elements Canvas Brushes Basic shapes Rectange, Ellipse, Line, Polygon, etc. TextBlock Image
25
Canvas Is a Drawing Surface Children have relative positions: <Rectangle Canvas.Top="25" Canvas.Left="25" <Rectangle Canvas.Top="25" Canvas.Left="25" Width="200" Height="150" Fill=“Yellow" /> Width="200" Height="150" Fill=“Yellow" /></Canvas> <Rectangle Canvas.Top="25" Canvas.Left="25" <Rectangle Canvas.Top="25" Canvas.Left="25" Width="200" Height="150" Fill=“Yellow" /> Width="200" Height="150" Fill=“Yellow" /></Canvas> The Canvas The Rectangle
26
Canvas (2) Currently the parent of the every Silverlight XAML document: Note xmlns= usage on root element to indicate document schema <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> </Canvas> <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> </Canvas>
27
Canvas (3) Position relative to first Canvas parent: <Rectangle Canvas.Top="25" Canvas.Left="25" <Rectangle Canvas.Top="25" Canvas.Left="25" Width="200" Height="150" Fill="Black" /> Width="200" Height="150" Fill="Black" /> <Canvas Canvas.Top=“50" Canvas.Left="50" <Canvas Canvas.Top=“50" Canvas.Left="50" Width="150" Height="100" Width="150" Height="100" Background="Red"> Background="Red"> <Ellipse Canvas.Top="25" <Ellipse Canvas.Top="25" Canvas.Left="25" Canvas.Left="25" Width="150" Width="150" Height="75" Height="75" Fill=“White" /> Fill=“White" /> </Canvas> <Rectangle Canvas.Top="25" Canvas.Left="25" <Rectangle Canvas.Top="25" Canvas.Left="25" Width="200" Height="150" Fill="Black" /> Width="200" Height="150" Fill="Black" /> <Canvas Canvas.Top=“50" Canvas.Left="50" <Canvas Canvas.Top=“50" Canvas.Left="50" Width="150" Height="100" Width="150" Height="100" Background="Red"> Background="Red"> <Ellipse Canvas.Top="25" <Ellipse Canvas.Top="25" Canvas.Left="25" Canvas.Left="25" Width="150" Width="150" Height="75" Height="75" Fill=“White" /> Fill=“White" /> </Canvas>
28
Shapes
29
Brushes Determines how objects are painted For painting objects (e.g. Fill) For painting of lines (e.g. Stroke) Brush options include: Solid color brushes Gradient brushes Image brushes
30
Brushes (2) Support creation by name 141 named colors supported (e.g. Blue, Red, Green) Supports #FFFFFF or #FFFFFFFF syntax as well </Rectangle> </Rectangle>
31
Brushes (3) Start and Stop are to set angle as numbers Gradient Stops are the different color points </Rectangle> </Rectangle>
32
Brushes (4) Gradient Stops are same syntax as Linear Gradient <GradientStop Color="Red" <GradientStop Color="Red" Offset="0" /> Offset="0" /> <GradientStop Color="Black" <GradientStop Color="Black" Offset="1" /> Offset="1" /> </Rectangle> <GradientStop Color="Red" <GradientStop Color="Red" Offset="0" /> Offset="0" /> <GradientStop Color="Black" <GradientStop Color="Black" Offset="1" /> Offset="1" /> </Rectangle>
33
Brushes (5) Gradient Stops are same syntax as Linear Gradient <ImageBrush <ImageBrush ImageSource="http://.../XBox360Logo.jpg" /> ImageSource="http://.../XBox360Logo.jpg" /> </Ellipse> <ImageBrush <ImageBrush ImageSource="http://.../XBox360Logo.jpg" /> ImageSource="http://.../XBox360Logo.jpg" /> </Ellipse>
34
Using Text <TextBlock>Hello</TextBlock><TextBlock>Hello</TextBlock> Hello Hello Hello Hello <TextBlock FontFamily="Courier New">Hello FontFamily="Courier New">Hello <TextBlock Hello Hello there, how are you? Hello there, how are you?</TextBlock> Hello there, how are you? Hello there, how are you?</TextBlock> Hello there, how are you? <TextBlock> Hello there, how are you? Hello there, how are you?</TextBlock><TextBlock> </TextBlock> Hello there, how are you?
35
Using Images Like ImageBrush But can only place a rectangular image
36
Transformations Used to make changes to an object </Rectangle> </Rectangle>
37
Transformations (2) Power in Transforming Groups of Objects <Canvas> <Ellipse Canvas.Top="25" Canvas.Left="25" <Ellipse Canvas.Top="25" Canvas.Left="25" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /> <Ellipse Canvas.Top="25" Canvas.Left="65" <Ellipse Canvas.Top="25" Canvas.Left="65" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /> </Canvas><Canvas> <Ellipse Canvas.Top="25" Canvas.Left="25" <Ellipse Canvas.Top="25" Canvas.Left="25" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /> <Ellipse Canvas.Top="25" Canvas.Left="65" <Ellipse Canvas.Top="25" Canvas.Left="65" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /> </Canvas>
38
Transformations (3) Transform Types Rotation Resizes/Stretch Skews Moves Scale, Skew and Translate Combined
39
Transformations (4) Allows Grouping of Multiple Transforms <Canvas> <Ellipse Canvas.Top="25" Canvas.Left="25" <Ellipse Canvas.Top="25" Canvas.Left="25" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /> <Ellipse Canvas.Top="25" Canvas.Left="65" <Ellipse Canvas.Top="25" Canvas.Left="65" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /></Canvas><Canvas> <Ellipse Canvas.Top="25" Canvas.Left="25" <Ellipse Canvas.Top="25" Canvas.Left="25" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /> <Ellipse Canvas.Top="25" Canvas.Left="65" <Ellipse Canvas.Top="25" Canvas.Left="65" Width="10" Height="10" Fill="Black" /> Width="10" Height="10" Fill="Black" /></Canvas>
40
Integrating Media Used to show media (music or video) Control Video with Code No Built-in Controls – You build the UI in XAML <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> </Canvas> <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> </Canvas>
41
Naming Objects in XAML XAML objects can be named by adding a x:Name attribute to the element: They can then be referenced by other XAML elements elsewhere in the file Can then be programmed against via code <Canvas> <Ellipse x:Name="theCircle" Width="100" <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> Height="100" Fill="Yellow" /></Canvas><Canvas> <Ellipse x:Name="theCircle" Width="100" <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> Height="100" Fill="Yellow" /></Canvas>
42
Access Silverlight via JavaScript Use browser’s document.getElementById() to access the Silverlight control on a page: Can also use ASP.NET AJAX $get() function: var control = document.getElementById("WpfeControl1"); var control = $get("WpfeControl1");
43
Find XAML object via script findName(name) method on Silverlight control var wpfeControl = document.getElementById("WpfeControl1"); var theCircle = wpfeControl.findName("theCircle"); if (theCircle != null) theCircle.opacity =.5; theCircle.opacity =.5; var wpfeControl = document.getElementById("WpfeControl1"); var theCircle = wpfeControl.findName("theCircle"); if (theCircle != null) theCircle.opacity =.5; theCircle.opacity =.5; <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> <Ellipse x:Name="theCircle" Width="100" <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> Height="100" Fill="Yellow" /></Canvas> <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> <Ellipse x:Name="theCircle" Width="100" <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> Height="100" Fill="Yellow" /></Canvas>
44
Referencing Child Elements Canvas.Children collection: Add() Insert() Remove() RemoveAt() GetItem() Clear() Count
45
CreateFromXaml method Allows dynamic Silverlight object creation and insertion into existing XAML tree Enables very interesting AJAX scenarios where the XAML fragment is created and returned from a server var wpfeControl = document.getElementById("WpfeControl1"); var rootCanvas2 = wpfeControl.findName("canvas2"); var fragment =' '; var newRect = wpfeControl.createFromXaml(fragment); var newRect = wpfeControl.createFromXaml(fragment); rootCanvas2.children.add(newRect); var wpfeControl = document.getElementById("WpfeControl1"); var rootCanvas2 = wpfeControl.findName("canvas2"); var fragment =' '; var newRect = wpfeControl.createFromXaml(fragment); var newRect = wpfeControl.createFromXaml(fragment); rootCanvas2.children.add(newRect);
46
Silverlight Events Standard Events Loaded MouseMove MouseEnter MouseLeave MouseLeftButtonDown MouseLeftButtonUp Use.NET / ASP.NET AJAX event pattern: function onMouseEnter(sender, eventargs) { sender.Fill = “Red”; sender.Fill = “Red”;} function onMouseEnter(sender, eventargs) { sender.Fill = “Red”; sender.Fill = “Red”;} KeyUp KeyDown GotFocus LostFocus
47
Silverlight Event Example <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> <Ellipse MouseEnter="javascript:onMouseEnter" <Ellipse MouseEnter="javascript:onMouseEnter" MouseLeave="javascript:onMouseLeave" MouseLeave="javascript:onMouseLeave" Height="100" Width="100" Fill="Teal" /> Height="100" Width="100" Fill="Teal" /> <Ellipse Canvas.Left="120“ <Ellipse Canvas.Left="120“ MouseEnter="javascript:onMouseEnter" MouseEnter="javascript:onMouseEnter" MouseLeave="javascript:onMouseLeave" MouseLeave="javascript:onMouseLeave" Height="100" Width="100" Fill="Teal" /> Height="100" Width="100" Fill="Teal" /></Canvas> <Canvas xmlns="..." xmlns:x="..."> xmlns:x="..."> <Ellipse MouseEnter="javascript:onMouseEnter" <Ellipse MouseEnter="javascript:onMouseEnter" MouseLeave="javascript:onMouseLeave" MouseLeave="javascript:onMouseLeave" Height="100" Width="100" Fill="Teal" /> Height="100" Width="100" Fill="Teal" /> <Ellipse Canvas.Left="120“ <Ellipse Canvas.Left="120“ MouseEnter="javascript:onMouseEnter" MouseEnter="javascript:onMouseEnter" MouseLeave="javascript:onMouseLeave" MouseLeave="javascript:onMouseLeave" Height="100" Width="100" Fill="Teal" /> Height="100" Width="100" Fill="Teal" /></Canvas> function onMouseEnter(sender) { sender.Fill = “Coral”; sender.Fill = “Coral”;} function onMouseLeave(sender) { sender.Fill = “Teal”; sender.Fill = “Teal”;} function onMouseEnter(sender) { sender.Fill = “Coral”; sender.Fill = “Coral”;} function onMouseLeave(sender) { sender.Fill = “Teal”; sender.Fill = “Teal”;}
48
Code handling with JavaScript and XAML
49
Animating with XAML Silverlight provides a rich animation system Animations can be defined in XAML Animations can be triggered via Code
50
Animating XAML Example <Canvas> <DoubleAnimation <DoubleAnimation Storyboard.TargetName="theCircle" Storyboard.TargetName="theCircle" Storyboard.TargetProperty="Width" Storyboard.TargetProperty="Width" From="200" To="1" Duration="0:0:2" From="200" To="1" Duration="0:0:2" AutoReverse="True"/> AutoReverse="True"/> <Ellipse x:Name="theCircle" Width="100" <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> Height="100" Fill="Yellow" /></Canvas><Canvas> <DoubleAnimation <DoubleAnimation Storyboard.TargetName="theCircle" Storyboard.TargetName="theCircle" Storyboard.TargetProperty="Width" Storyboard.TargetProperty="Width" From="200" To="1" Duration="0:0:2" From="200" To="1" Duration="0:0:2" AutoReverse="True"/> AutoReverse="True"/> <Ellipse x:Name="theCircle" Width="100" <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> Height="100" Fill="Yellow" /></Canvas>
51
Triggers Used to specify what starts an Animation Properties are used to tie it to other Animation RoutedEvent The event that starts the triggers Actions A optional list of Storyboards to fire
52
Storyboards Contains one or more Animations Properties are used to share with all Animations TargetName and TargetProperty From, By and To Duration AutoReverse RepeatBehavior
53
Animation Types DoubleAnimation Animate numeric properties <DoubleAnimation Storyboard.TargetName="theCircle" Storyboard.TargetName="theCircle" Storyboard.TargetProperty="Width" Storyboard.TargetProperty="Width" From="200" To="1" Duration="0:0:2" From="200" To="1" Duration="0:0:2" AutoReverse="True"/> AutoReverse="True"/><DoubleAnimation Storyboard.TargetName="theCircle" Storyboard.TargetName="theCircle" Storyboard.TargetProperty="Width" Storyboard.TargetProperty="Width" From="200" To="1" Duration="0:0:2" From="200" To="1" Duration="0:0:2" AutoReverse="True"/> AutoReverse="True"/>
54
Animation Types (2) ColorAnimation Animation colors...<ColorAnimation Storyboard.TargetName="circleBrush" Storyboard.TargetName="circleBrush" Storyboard.TargetProperty="Color" Storyboard.TargetProperty="Color" From="Black" To="LightGray" Duration="0:0:2" From="Black" To="LightGray" Duration="0:0:2" AutoRepeat="True" /> AutoRepeat="True" />... <SolidColorBrush x:Name="circleBrush" <SolidColorBrush x:Name="circleBrush" Color="Yellow" /> Color="Yellow" /> </Ellipse>...<ColorAnimation Storyboard.TargetName="circleBrush" Storyboard.TargetName="circleBrush" Storyboard.TargetProperty="Color" Storyboard.TargetProperty="Color" From="Black" To="LightGray" Duration="0:0:2" From="Black" To="LightGray" Duration="0:0:2" AutoRepeat="True" /> AutoRepeat="True" />... <SolidColorBrush x:Name="circleBrush" <SolidColorBrush x:Name="circleBrush" Color="Yellow" /> Color="Yellow" /> </Ellipse>
55
AnimationTypes (3) PointAnimation Animates Dual-Value Numbers (e.g. 100,100)...<PointAnimation Storyboard.TargetName="myBrush" Storyboard.TargetName="myBrush" Storyboard.TargetProperty="StartPoint" Storyboard.TargetProperty="StartPoint" From="0,0" To="1,1" Duration="0:0:2" From="0,0" To="1,1" Duration="0:0:2" AutoReverse="True" /> AutoReverse="True" />... <LinearGradientBrush x:Name="myBrush" StartPoint="0,0" EndPoint="1,1"> StartPoint="0,0" EndPoint="1,1">...... </LinearGradientBrush>...<PointAnimation Storyboard.TargetName="myBrush" Storyboard.TargetName="myBrush" Storyboard.TargetProperty="StartPoint" Storyboard.TargetProperty="StartPoint" From="0,0" To="1,1" Duration="0:0:2" From="0,0" To="1,1" Duration="0:0:2" AutoReverse="True" /> AutoReverse="True" />... <LinearGradientBrush x:Name="myBrush" StartPoint="0,0" EndPoint="1,1"> StartPoint="0,0" EndPoint="1,1">...... </LinearGradientBrush>
56
Animating with Keyframes Keyframe Animations DoubleAnimationUsingKeyFrames ColorAnimationUsingKeyFrames PointAnimationUsingKeyFrames Allows you to create an Animation using: KeyFrame objects that specify values at specific times Each KeyFrame contains KeyTimes and Values
57
Animation with Keyframes (2) Three types of KeyFrames Discrete Specific value to set immediately Linear Animate from previous value using linear interpolation Spline Change value progressively using splined interpolation
58
Animation with KeyFrames - Example...<DoubleAnimationUsingKeyFrames Storyboard.TargetName="theCircle" Storyboard.TargetName="theCircle" Storyboard.TargetProperty="Width"> Storyboard.TargetProperty="Width"> </DoubleAnimationUsingKeyFrames>......<DoubleAnimationUsingKeyFrames Storyboard.TargetName="theCircle" Storyboard.TargetName="theCircle" Storyboard.TargetProperty="Width"> Storyboard.TargetProperty="Width"> </DoubleAnimationUsingKeyFrames>...
59
Programmatic Animation StoryBoard object enables programmatic control of animation sequences Begin() Pause() Resume() Stop() Seek() function onMouseEnter(sender) { var animationSequence = WPFCtrl1.findName(“animationSequence”); var animationSequence = WPFCtrl1.findName(“animationSequence”); animationSequence.Begin(); animationSequence.Begin();} function onMouseEnter(sender) { var animationSequence = WPFCtrl1.findName(“animationSequence”); var animationSequence = WPFCtrl1.findName(“animationSequence”); animationSequence.Begin(); animationSequence.Begin();}
60
Animating XAML
61
Silverlight 1.1 development
62
62 Integrated Design and Development with Silverlight Declarative Programming (XAML) Bringing Designers Into the Application Development Process Tools for Designers: Microsoft Expression Tools for Developers: Visual Studio
63
63 Designer Emotional Connection Look, behavior, data visualization, usability, brand impact Developer Functional Capabilities Deployment, function, data connection and integrity, IT process, security C++ C# VB.NET Paper JPG / TIFF MOV / WMV PSD PPT XAML
64
Bringing it all together: Tools and Silverlight
65
Roadmap Expression Studio Expression Blend 2 Preview MIX 07 Summer 07 Beyond…Beyond… Silverlight 1.0 Beta Silverlight 1.1 Alpha Silverlight Tools Preview for Visual Studio ‘Orcas’ Expression Media Encoder Silverlight 1.0 Expression Studio 2 Silverlight 1.1 SilverLight for mobile Silverlight Tools for Visual Studio ‘Orcas’
66
Summary Silverlight is cross-browser cross-platform internet plug-in Media Rich 2D graphics Animation, transformation and text Scenarios Media Interactive content Rich Internet Applications Programming model XAML (Camel) Javascript Tools – Visual Studio and Expression
67
Where To Learn More Silverlight Dev Center on MSDN Great SDK documentation and Quickstart samples http://msdn.microsoft.com/silverlight http://www.silverlight.net (Coming soon!)http://www.silverlight.net http://www.microsoft.com/silverlight Good blogs to watch: http://blogs.msdn.com/mharsh/ http://blogs.msdn.com/jstegman/ http://blogs.msdn.com/markjo ;-)http://blogs.msdn.com/markjo
68
? markjo@microsoft.com www http://blogs.msdn.com/markjo Thank you!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.