610 likes | 713 Views
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
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