610 likes | 723 Views
Dive into the world of Silverlight 2 application development with this detailed guide by Scott Guthrie. Learn the essentials, from setting up Silverlight tools in Visual Studio 2008 to working with XAML, shapes, and UI controls. This comprehensive resource covers creating rich applications with XAML's flexible markup language, enabling you to leverage graphical controls and layouts effectively. Unlock the power of event handling and composition in Silverlight, ensuring you're equipped to build modern web applications.
E N D
Building Silverlight 2 Applications(Parts 1 and 2) Scott Guthrie scottgu@microsoft.com http://weblogs.asp.net/scottgu
What You'll Need: • Install the following: • Silverlight Tools for Visual Studio 2008 Beta 2 • Expression Blend 2.5 June Preview • Everything you need is at www.silverlight.net • Links to downloads & docs • VS object browser a great way to view APIs
demo Building Hello World
Test.htm <html> <body> <object data="data:application/x-silverlight," type="application/x-silverlight-2-b1"> <param name="source“ value="ClientBin/SilverlightApplication1.xap"/> <a href="http://go.microsoft.com/fwlink/?LinkID=108182"> <imgsrc="http://go.microsoft.com/fwlink/?LinkId=108181" /> </a> </object> <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe> </body> </html>
XAML • XAML = eXtensible Application Markup Language • Flexible XML document schema • Example usages: WPF, Silverlight, Workflow Foundation • Enables rich tooling support • While still preserving readability & hand-coding with text editors
XAML Sample <Grid> <TextBlockFontSize="32" Text="Hello world" /> </Grid> Hello world
Markup = Object Model <TextBlock FontSize="32" Text="Hello world" /> • = TextBlock t = new TextBlock(); t.FontSize = 32; t.Text = "Hello world"; • Anything that can be expressed in XAML can be programmatically coded as well
<TextBlock /> <TextBlock>Hello</TextBlock> Hello <TextBlockFontSize="18">Hello</TextBlock> Hello <TextBlock FontFamily="Courier New">Hello</TextBlock> Hello Hello there, how are you? <TextBlockTextWrapping="Wrap" Width="100"> Hello there, how are you? </TextBlock> Hello there, how are you? <TextBlock> Hello there,<LineBreak/>how are you? </TextBlock>
<Rectangle /> <Ellipse /> <Line /> <Polygon /> <PolyLine /> <Path /> Shapes and Vector Graphics
Controls • Re-usable UI elements that encapsulate UI and behavior and enable re-use and composition <Button x:Name=“MyButton” Content=“Push Me” Width=“150” Height=“50” /> Button b = new Button(); b.Width = 150; b.Height = 50; b.Content= “Push Me";
Silverlight Controls • Core Controls: • Border • Image • MediaElement • MultiScaleImage • ToolTip • ScrollViewer • ProgressBar • Layout Controls: • StackPanel • Grid / GridSplitter • Canvas • High-Level Controls: • Calendar • DataGrid • Slider • TabControl • DateTimePicker • Shapes: • Ellipse • Rectangle • Line • TextBlock • Path • Form Controls: • TextBox • PasswordBox • Button • Toggle/Repeat Button • CheckBox • RadioButton • ComboBox • ListBox • Navigation Controls: • HyperlinkButton • Popup
x:Name • Name your controls so you can use it in code • Visual Studio automatically declares field for all x:name elements <Button x:Name=“MyButton”/> public void Page_Loaded(sender, MouseEventArgs e) { MyButton.Content = “Push Me!”; }
Wiring Up Event Handlers • Event handlers can be wired up declaratively in XAML: • Or explictly within the code-behind file • VB – using the "Handles" keyword • C# -- programmatically within the Page_Loaded event handler <Button x:Name=“MyButton” Content=“Push Me” Click=“MyButton_Click“/> public void MyButton_Click(object sender, RoutedEventArgse) { // todo: add code }
demo Controls
Layout • Silverlight and WPF support concept of Layout Panels • Canvas • StackPanel • Grid • Layout system is customizable • WrapPanel, DockPanel, TilePanel, RadialPanel, Etc.
The Canvas The Rectangle Canvas • Is a Drawing Surface • Children have relative positions: <Canvas Width="250" Height="200"> <Rectangle Canvas.Top="25" Canvas.Left="25" Width="200" Height="150" Fill="Yellow" /> </Canvas>
Attached Property Syntax <Canvas> <Rectangle Canvas.Top="25"/> </Canvas> • Top property only make sense inside a Canvas • When we add new container panels, do we have to add new properties to Rectangle? • Solution: Use attached properties to add flexible, container specific customization
Attached Properties (2) <Rectangle Canvas.Top="25" Canvas.Left="25"/> • = Rectangle rectangle = new Rectangle(); rectangle.SetValue(Canvas.TopProperty, 25); rectangle.SetValue(Canvas.LeftProperty, 25);
StackPanel <StackPanel Orientation="Vertical"> <Button>Button 1</Button> <Button>Button 2</Button> </StackPanel>
Grid Panel <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="100"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="75"/> <RowDefinition Height="*"/> <RowDefinition Height="85"/> </Grid.RowDefinitions> <Button Grid.Column="1" Grid.Row="1" Content=“Button 1" Margin="8,8,8,8"/> <Button Grid.Column="1" Grid.Row="2" Content=“Button 2" Margin="8,8,8,8"/> </Grid>
Tip: Dynamic Flow Layout • Remove the top "Width" and "Height" attributes on your parent control in order to have Silverlight fill the entire HTML region your page provides it
demo Layout
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 • Video brushes
Brushes (2) • <SolidColorBrush /> • Support creation by name • 141 named colors supported (e.g. Blue, Red, Green) • Supports #FFFFFF or #FFFFFFFF syntax as well <Rectangle Width="200" Height="150" > <Rectangle.Fill> <SolidColorBrush Color="Black" /> </Rectangle.Fill> </Rectangle> <Rectangle Width="200" Height="150" Fill="Black" /> <Rectangle Width="200" Height="150" Fill="#FFFFFF" />
Brushes (3) • <LinearGradientBrush /> • Start and Stop are to set angle as numbers • Gradient Stops are the different color points <Rectangle Width="200" Height="150"> <Rectangle.Fill> <LinearGradientBrushStartPoint="0,0" EndPoint="1,1"> <LinearGradientBrush.GradientStops> <GradientStop Color=“Blue" Offset="0" /> <GradientStop Color="Black" Offset="1" /> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Rectangle.Fill> </Rectangle>
demo Brushes
All elements support them Transform Types <RotateTransform /> <ScaleTransform /> <SkewTransform /> <TranslateTransform /> Moves <MatrixTransform /> Scale, Skew and Translate Combined Transformations
Transformations (2) <TextBlock Text="Hello World"> <TextBlock.RenderTransform> <RotateTransform Angle="45" /> </TextBlock.RenderTransform> </TextBlock> Hello World
demo Transforms
Rich Networking Options Available • HTTP • WCF/SOAP • REST • RSS • Sockets • ADO.NET Data Services (aka "Astoria") • Cross Domain Networking Support
demo Networking
Databinding • Enable clean view/model separation and binding • Change UI presentation wtihout code-behind modifications • Works with any object that implements IEnumerable • Arrays, Lists, Collections, etc. • Binding Expressions can be one way or two way • INotifyPropertyChange change notifications supported
demo Databinding
User Controls • Enable easy encapsulation and re-use of functionality • Can be declaratively specified or procedurally created • Can expose custom events and properties
demo User Controls
Styles • Allow look and feel of a control to be defined externally • Conceptually similar to Stylesheets with HTML • Support encapsulating style properties and control templates • Control templates particularly powerful (will see soon) • Can be defined either within UI XAML files or App.xaml • App.xaml allows use across all files in application
Control Templates • Allow the visual tree of a control to be completely replaced and/or customized however you want • Override not only the look and style – but also the feel • Interaction behaviors, animations, etc. • Enable clean designer/developer workflow
demo Content Templates