silver light training
TRANSCRIPT
SILVERLIGHT 4.0
Agenda• Introduction• Architecture• XAML• Standard Controls• Resources and Styles• Data Binding• Templates• Custom Controls• Graphics, Transformations and Animations• UI interaction• Triggers• Hosting • Working with Services• Navigation Applications• Debugging Silverlight Applications• Unit Tests• Expression Suite• 3-rd party libraries
Day 1
• Introduction• Architecture• XAML• Standard Controls– Layout controls– Useful properties
• Exercise
Introduction
What is Silverlight ?
• Microsoft Silverlight is a cross-browser, cross-platform implementation of the .NET Framework
• It is used for creating Internet/Intranet applications with rich graphic interface and business logic executed by client
History• Until middle of 90s the most applications had
Win32/MFC style GUI• In 90s the Web started to grow• Many Web frameworks offered “Windows style”
solutions for creating “rich internet applications”:– JavaScript-based (AJAX, jQuery, Dojo, ExtJs, etc)– Flash-based– Java applets– ActiveX
• In 2002 Microsoft introduced .NET 1.0 with new API for creating WinForms application that replaced MFC
History• In .NET 3.0 Microsoft added a totally new concept
for building WinForms applications – Windows Presentation Foundation (WPF)
• Silverlight 1.0 was released shortly after .NET 3.0. It was developed under code name WPF/E – WPF everywhere
• There was a big gap between WPF 3.0/3.5 and Silverlight 1.0/2.0, but starting from Silverlight 3.0 this gap had minimized drastically and now Silverlight 4.0 pretty much comparable to WPF 4.0
Architecture
Silverlight platform
• Silverlight must by installed before first-time using by running small footprint installation (~6 MB)
• Silverlight is installed as plug-in to Internet browser
• Silverlight consists from 2 major parts:– Core presentation framework– .NET Framework for Silverlight
Silverlight platform
Compatible Operating Systems and Browsers
Application structure
• Silverlight application contains – Application assembly:
• complied application code• XAML files• Embedded resources: Images, video
– Included resources referred by URL– 3-rd party assemblies referenced by application
• Visual Studio combines all these files into application package – compressed zip file that has .xap extension
Application structure
• XAP file includes manifest file that identifies all assemblies in the package
• At minimum the application package includes assembly with your implementation of System.Windows.Application class:– Handles Startup and Exit events– Interaction with Silverlight plug-in– Resource management
Deployment
• Silverlight application is always deployed from Web server on Internet/Intranet
• Web Server must include at least:– XAP package– HTML page that embeds Silverlight plug-in
• End user just browses to HTML page and Silverlight plug-in downloads and initializes XAP package
HELLO WORLD
Application Caching
• Browsers store XAP file in browser cache in order to improve startup time
• Usually XAP file includes number of non-changed standard or 3-rd party assemblies
• Application library caching improves startup time by separating these rarely changed assemblies from main XAP to dedicated ZIPs
XAML
What is XAML
• Extensible Application Markup Language (XAML) is a declarative language based on XML
• Initializes objects and sets properties• Has hierarchical structure that defines relations
between objects• Could include code that respond to events and
manipulates objects in separate code-behind file
Example<UserControl
x:Class="MySilverlight.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid Background="OldLace"> </Grid> </UserControl>
XAML syntax
• XAML defines objects that are mapped into CLR types
• Attributes defined in XAML are mapped into properties of CLR type
• Examples<Button Name="CheckoutButton"/><TextBox Text="This is a Text Box"/>
Controls• WPF/Silverlight GUI is combined from hierarchy
of controls that are combined into “visual tree”• Controls are defined in XAML or in code-behind.
<UserControl> <Grid Background="OldLace">
<Border><TextBlock Text=“Text is here”/>
</Border><my:CustomControl>
<TextBlock Text=“Another Text is here”/></my:CustomControl>
</Grid> </UserControl>
Control Content Model• Most controls are designed to display certain kinds
of content• Controls could be divided to following categories
from content point of view:– No content controls
<TextBox…/> <TextBlock …/> <Rectangle …/>
– Controls that display a single element<Border><TextBlock/></Border>
– Controls that display collection of elements (layout controls)<StackPanel><TextBlock/><Border>…</Border></StackPanel>
XAML properties syntax
• Properties of objects could be defined in various ways:
• Attribute syntaxSets a value for a property by declaring an attribute on an existing object element
<TextBox Text="This is a Text Box"/>
• The string value of attribute is converted/parsed into type of underlying property
<Button Visibility=“Collapsed” /><Border Width=“50” Background=“Red”/>
XAML properties syntax
• Property element syntaxAllows to assign non-string values (objects) to property
<Button Content=“Click Me”> <Button.BorderBrush>
<LinearGradientBrush> … </LinearGradientBrush> </Button.BorderBrush> </Button>
XAML properties syntax• Collection syntax
Properties that implement IList, IDictionary or derived from Array could be defined as:
<Button Content=“Click Me”> <Button.BorderBrush>
<LinearGradientBrush> <LinearGradientBrush.GradientStops>
<GradientStop Color="Yellow" Offset="0.0" /> <GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color="LimeGreen" Offset="1.0" /> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Button.BorderBrush> </Button>
XAML properties syntax
• Content propertiesEnabled for classes that has ContentPropertyAttribute which specifies what property will get value of content
<LinearGradientBrush><GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" /> <GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color="LimeGreen" Offset="1.0" /></LinearGradientBrush>
Attached properties
• Attached properties are owned and defined by a particular type, but set on any element
• Example<Canvas> <TextBlock Canvas.Left="10" Canvas.Top="10"
Text="Left-top corner"></TextBlock> <TextBlock Canvas.Left="170" Canvas.Top="170"
Text="Right-bottom corner"></TextBlock></Canvas>
Events
• Silverlight controls usually have various events that help for interaction with controls
• Event handling is provided as method in code-behind file
CLICK ME
Routed events
• A routed event is an event that is potentially passed on (routed) from a child object to each of its successive parent objects in the object tree
• When routed event is handled by non-owner the sender is no longer the same object as the event-raising object. For these cases, the value of the RoutedEventArgs.OriginalSource property is the object of interest
• Setting RoutedEventArgs.Handled to true stops future routing of event
Routed events• Routed events in Silverlight:
– KeyDown– KeyUp– GotFocus– LostFocus– MouseLeftButtonDown– MouseLeftButtonUp– MouseMove– MouseWheel– BindingValidationError– DragEnter– DragLeave– DragOver– Drop
XAML namespaces
• Namespaces are used for resolve ambiguities of string tokens (object names and properties)
• XAML uses XML-style namespace declaration (xmlns)
• Used for distinguish between:– Silverlight core objects from core libraries– Objects from extension libraries– Objects defined in Silverlight application
Using namespaces
• Every XAML file has definition of default XAML namespace and XAML language xmls:x namespacexmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
• Default XAML namespace defines all XAML standard elements
• XAML language namespace defines few properties that could be defined for every XAML object:x:Name – name of object. Unique per XAML filex:Key – unique key for resource
Using namespaces
• Other namespaces need to be declared first xmlns:sdk=http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdkxmlns:mpsl="clr-namespace:MP.SL“
• Than objects from these namespaces could be used:<sdk:ValidationSummary
x:Name="validationSummary" Grid.Row="2" Margin="0,20,0,0" />
<mpsl:WaitControl x:Name="waitMessage" Grid.RowSpan="3">
</mpsl:WaitControl>
Standard Controls
Controls types• Silverlight ships with many common controls. In addition
there are more controls available from Silverlight SDK (Toolkit)
• All controls could be ordered by types:– Layout– Information display– Buttons– Data display– User input– Dialog boxes– Media– HTML display
Layout controls
Layout controls are used to manage the size, dimensions, position, and arrangement of child elements
– Border– Canvas– Grid, GridSplitter– StackPanel– DockPanel– WrapPanel– ViewBox– ScrollViewer– TabControl
Layout controls - Border
• Provides a border, background, or both to another control
• Syntax<Border> singleChild </Border>
• Useful propertiesWidth, Height, BorderBrush, BorderThickness, Background, CornerRadius, Padding
• Useful attached propertiesVerticalAlignment, HorizontalAlignment
Layout controls - Canvas
• Provides a surface to display child elements at specific coordinates in the canvas
• Syntax<Canvas ...> one or more UIElements </Canvas>
• Useful attached propertiesCanvas.Left, Canvas.Top, Canvas.ZIndex
Layout controls - Grid
• Provides a surface composed of rows and columns to display child elements
• Syntax<Grid ...> one or more UIElements </Grid>
• Useful propertiesColumnDefinitions, RowDefinitions
• Useful attached propertiesGrid.Column, Grid.Row, Grid.ColSpan, Grid.RowSpanVerticalAlignment, HorizontalAlignment
Layout controls – Grid cont.
• Width of columns and height of rows could be defined in various ways:– Default (not specified) – proportionally divide
available space– Absolute value in pixels– Star - weighted proportion of available space
Syntax: “[weight]*”– Auto – based on size of content
Syntax: “Auto”
Layout controls – GridSplitter (SDK)
• Allows a user to resize the columns or rows in a Grid control
• The resizing behavior depends on Grid.ColSpan, Grid.RowSpan, HorizontalAlignment and VerticalAlignment
HorizontalAlignment VerticalAlignment ResultStretch Top, Center, Bottom Resizes rows.Right, Left, Center Stretch Resizes columns.
Layout controls – StackPanel
• Provides a surface to display child elements in a line; either horizontally or vertically.
• Syntax<StackPanel ...>
oneOrMoreChildren </StackPanel>
• Useful propertiesOrientation
• Useful attached propertiesVerticalAlignment, HorizontalAlignment
Layout controls – DockPanel (Toolkit)
• Defines an area where you can arrange child elements either horizontally or vertically, relative to each other
• Syntax<toolkit:DockPanel>
Children </toolkit:DockPanel>
• Useful propertiesLastChildFill
• Useful attached propertiesDockPanel.Dock
Layout controls – WrapPanel (Toolkit)
• Positions child elements in sequential position, breaking content to the next line at the edge of the containing box
• Syntax<toolkit:WrapPanel>
Children </toolkit:WrapPanel>
• Useful propertiesOrientation
Layout controls – ViewBox
• Provides a control that can stretch or scale its content to fill the available space
• Syntax<ViewBox ...>
child </ViewBox>
• Useful propertiesStretch, StretchDirection
Layout controls – ScrollViewer
• Provides a scrollable surface for displaying a child element
• Syntax<ScrollViewer ...>
single content control</ScrollViewer>
• Useful propertiesHorizontalScrollBarVisibility, VerticalScrollBarVisibilityCould be Visible, Hidden, Auto
Layout controls – TabControl (SDK)
• Provides a tabbed interface for displaying elements• Syntax
<sdk:TabControl …>one or more sdk:TabItem controls
</sdk:TabControl>
<sdk:TabItem Header=“Tab caption”…>single content control
</sdk:TabItem>• Useful properties
TabStripPlacement
Useful properties - Size
• Control sizeFrameworkElement.WidthFrameworkElement.HeightWidth and Height are specified in pixels. The default value is “Auto” – according to size of content.
• Control actual sizeFrameworkElement.ActualWidthFrameworkElement.ActualHeightCan’t be set. Contains calculated width and height of control in pixels
Useful properties - Position
• AlignmentFrameworkElement.VerticalAlignmentValues: Top, Bottom, Center, StretchFrameworkElement.HorizontalAlignmentValues: Left, Right, Center, StretchBoth are attached properties
Useful properties - Position• Margin
FrameworkElement.MarginDefines outlet margin of control in pixelsSyntax:
<frameworkElement Margin="uniform"/>or
<frameworkElement Margin="left+right,top+bottom"/>
or <frameworkElement
Margin="left,top,right,bottom"/>
• PaddingControl.PaddingDefines space between content of control and its outlet borderHas same syntax like MarginSome controls implements Control.Padding too (Border)
Useful properties - Visibility
• VisibilityUIElement.VisibilityDefines visibility of control. Collapsed controls are not renderValues: Visible, Collapsed
• OpacityUIElement.OpacityDefines the degree of control opacity 0.0-1.0. Default is 1.0
Useful properties - Background
• BackgroundControl.BackgroundDefines color backgroundValues: color string or Brush
Useful properties - Border
• BorderControl.BorderBrushDefines color of borderValues: color string or Brush
• BorderThicknessControl. BorderThicknessDefines thickness of borderSyntax:
<control BorderThickness="uniform"/> or
<control BorderThickness="left&right,top&bottom"/> or
<control BorderThickness="left,top,right,bottom"/>
Useful properties - Brushes
• SolidColorBrushDefines solid colorSyntax:<object property="predefinedColor/#rgb/#argb"/>
<object.property><SolidColorBrush Color=“color"/>
</object.property>
predefinedColor – Colors class properties#rgb – Red, Green, Blue#argb – Alpha (%), Red, Green, Blue
Useful properties - Brushes
• ImageBrushSyntax:<ImageBrush ImageSource=“image"/>
Useful properties - Brushes• LinearGradientBrush
Defines a gradient along a lineSyntax:<LinearGradientBrush ...> oneOrMoreGradientStops </LinearGradientBrush>The gradient line is definedby StartPoint and EndPointproperties. Default is diagonalline StartPoint=0,0 and EndPoint=1,1
Useful properties - Brushes
• RadialGradientBrushDefines radial gradientSyntax:<RadialGradientBrush>
oneOrMoreGradientStops </RadialGradientBrush>
The gradient is defined by focal point (GradientOrigin) and ellipse (Center, RadiusX, RadiusY).
LAYOUT EXERCISE
Day 2
• Standard Controls– Information display– Buttons– Data display– User input– Dialog boxes– Media– HTML display
• Resources and Styles• Exercise
Information display
User information controls provide contextual feedback or clarify an application's user interface. The user typically cannot interact with these controls.– TextBlock– Fonts, Foreground, Text decorations– ProgressBar– ToolTip
Information display - TextBlock
• Displays small amounts of read-only text• Syntax
<TextBlock ...>text
</TextBlock> or <TextBlock Text=“text”.../>
• Useful propertiesText, TextAlignment
• Useful attached propertiesfont and decoration properties
Information display – TextBlock cont
• TextBlock inline Syntax<TextBlock>
oneOrMoreInlineElements </TextBlock>
• RunRepresents a discrete section of formatted or unformatted text<Run Text=“text”… /> or <Run>text</Run>
• LineBreakBegins a new line <LineBreak/>
• Bold, Italic, Span
Fonts, Foreground
• FontsControl.FontFamilyControl.FontSizeControl.FontWeightControl.FontStyleControl.FontStretch
• ForegroundDefines color of textControl.Foreground
Text decorations
• TextDecorationsTextBlock.TextDecorations
• Text wrappingTextBlock.TextWrappingTextBlock.TextTrimming
Information display – ProgressBar
• Represents the progress of an operation• Syntax
<ProgressBar .../>• Useful properties
Width, Height,Value, Minimum, Maximum, IsIndeterminate, Foreground
Information display – ToolTip• Displays a ToolTip• Syntax
<ToolTip Content=“string”.../> or
<ToolTip ...> singleObject
</ToolTip ...> or
<ToolTip ...>stringContent</ToolTip>• Useful attached properties
HorizontalOffset, VerticalOffset• Useful attached properties
ToolTipService.ToolTip, ToolTipService.Placement
Buttons
Buttons are one of the most basic user interface controls. Applications typically perform some task in the Click event when a user clicks on them. – Button– HyperlinkButton– RepeatButton
Buttons - Button
• Responds to user input from a mouse, keyboard, stylus, or other input device and raises a Click event.
• Syntax<Button Content=“string”.../>
or<Button>
singleObject </Button>
• Useful eventsClick
• Useful propertiesIsEnabled
Buttons – HyperlinkButton• Represents a button control that displays a hyperlink.
Allows users to navigate to an external Web page or content within the same Silverlight application
• Syntax<HyperlinkButton Content=“string”.../>
or <HyperlinkButton>
singleObject </HyperlinkButton>
Useful eventsClick
• Useful propertiesIsEnabled, NavigateUri
Buttons - RepeatButton
• Represents a control that raises its Click event repeatedly from the time it is pressed until it is released.
• Syntax<RepeatButton Content=“string”.../>
or<RepeatButton>
singleObject </RepeatButton>
• Useful eventsClick
• Useful propertiesDelay
Data display
Data display controls are used to show information from a data source– DataGrid– Collection views– DataPager– TreeView
Data display – DataGrid (SDK)
• Displays a collection of data in rows and columns
• Syntax<sdk:DataGrid .../>
• Useful propertiesItemsSource, AutoGenerateColumns, Columns
Data display – DataGrid cont.
• Columns typesDataGridTextColumnDataGridCheckBoxColumnDataGridTemplateColumn
Data display – Collection views
• PagedCollectionViewRepresents a view for grouping, sorting, filtering
• Useful propertiesSortDescriptions, GroupDescriptions, Filter
Data display – DataPager (SDK)
• Provides a user interface for paging through a collection of data that implements IPagedCollectionView
• Syntax<sdk:DataPager .../>
• Useful propertiesSource, PageSize, DisplayMode, AutoEllipsis
• Typically used with DataGrid or ListBox
Data display – TreeView (SDK)
• Displays hierarchical data in a tree structure that has items that can expand and collapse.
• Syntax<sdk:TreeView ItemsSource=“items”.../>or<sdk:TreeView>
oneOrMore <sdk:TreeViewItem></sdk:TreeView>
• Useful propertiesSelectedValue, SelectedItem
User input
– TextBox– PasswordBox– RichTextBox– AutoCompleteBox– CheckBox– ComboBox– ListBox– RadioButton– Slider– Calendar, DatePicker
User input - TextBox
• Control for displaying or editing text• Syntax
<TextBox Text=“text”.../> • Useful properties
Text, IsReadOnly, AcceptsReturn• Useful attached properties
font and decoration properties
User input - PasswordBox
• Control that allows the user to enter sensitive data, such as a password
• Syntax<PasswordBox Password=“password”.../>
• Useful propertiesPassword, PasswordChar
User input - RichTextBox• Control for displaying or editing rich text. Supports formatted
text, hyperlinks, images, and other rich content• Syntax
<RichTextBox .../> or <RichTextBox ...>
blocksContent </RichTextBox>
• BlocksInline, InlineUIContainer, Run, Span, Bold, Hyperlink, Italic, Underline, LineBreak
User input – AutoCompleteBox (SDK)
• Provides a text box for user input and a drop-down that contains possible matches based on the input in the text box
• Syntax<sdk:AutoCompleteBox .../>
• Useful propertiesItemsSource, FilterMode, TextFilter, ItemFilter
• Filter ModesStartsWith (default), Contains, Equals, Custom, etc
User input – CheckBox
• Control that a user can select or clear• Syntax
<CheckBox Content=“string” .../>or<CheckBox>
singleObject </CheckBox>
• Useful propertiesIsChecked, IsThreeState
• Useful eventsClick, Checked, Indeterminate,Unchecked
User input – ComboBox
• Displays a drop-down list of items a user can select from
• Syntax<ComboBox .../>
• Useful propertiesItems, ItemsSource, SelectedItem,SelectedIndex, SelectedValue, DisplayMemberPath, SelectedValuePath
• Useful eventsSelectionChanged
User input – ListBox
• Displays a list of items a user can select by clicking• Syntax
<ListBox .../>• Useful properties
Items, ItemsSource, SelectionMode, SelectedItem, SelectedValue,SelectedIndex, DisplayMemberPath, SelectedValuePath
• Useful eventsSelectionChanged
User input – RadioButton• Allows a user to select a single option from a list of options• Syntax
<RadioButton Content=“string”.../> or <RadioButton ...>
content </RadioButton>
• Useful propertiesContent, IsChecked, GroupName
• Useful eventsClick, Checked, Indeterminate,Unchecked
• Grouping– Radio buttons under same parent are grouped. – Radio buttons with same GroupName are grouped
User input – Slider
• Represents a control that lets the user select from a range of values by moving a thumb along a track
• Syntax<Slider .../>
• Useful propertiesValue, Minimum, Maximum, SmallChange, LargeChange, Orientation, IsDirectionReversed
User input – Calendar (SDK)
• Allows a user to select a date from a visual calendar display
• Syntax<sdk:Calendar .../>
• Useful propertiesDisplayMode, SelectionMode, BlackoutDates, SelectedDate, SelectedDates
• Useful eventsSelectedDatesChanged
User input – DatePicker (SDK)
• Allows a user to select a date by typing it in a text field or selecting it from a drop-down calendar control
• Syntax<sdk:DatePicker .../>
• Useful propertiesSame as Calendar control
Dialog boxes
– MessageBox – standard .NET message box– OpenFileDialog– SaveFileDialog– ChildWindow– Popup
Dialog boxes - OpenFileDialog
• Enables the user to select one or more files from the file system
• Syntaxbool? userClickedOK =
(new OpenFileDialog()).ShowDialog();• Useful properties
MultiSelect, File, Files, Filter
Dialog boxes - SaveFileDialog
• Enables the user to specify options for saving a file
• Syntaxbool? userClickedOK =
(new SaveFileDialog()).ShowDialog();• Useful properties
File, Filter
Dialog boxes – ChildWindow (SDK)
• Provides a window that can be displayed over a parent window and blocks interaction with the parent window
• Syntax<sdk:ChildWindow Content=“string”.../> or<sdk:ChildWindow ...>
singleObject </sdk:ChildWindow>
• Useful methodsShow, Close
• Useful propertiesTitle, HasCloseButton, DialogResult
• ChildWindow is independent control that has its own XAML and code-behind files
Dialog boxes – Popup
• Overlays content on top of the existing content within the bounds of the Silverlight plug-in
• Syntax<Popup .../>
• Useful propertiesIsOpen, VerticalOffset, HorizontalOffset
Media
– Image– MultiScaleImage– MediaElement
Media - Image• Displays an image• Syntax
<Image .../> • Useful properties
Source, Stretch• Image size is defined by Width, Height and Stretch properties• Image Source
– Absolute URI (http://contoso.com/myPicture.jpg)– Relative to the referencing XAML file, no leading slash
(Source="myPicture.png" or Source="../resources/myPicture.png")– Relative to the XAP file application root
(Source="/resources/myPicture.png“)– Specifying an assembly, and then referencing the component
(Source=“/MySilverlightApp;component/myPicture.png")
Media – MultiScaleImage (DeepZoom)
• Enables users to open a multi-resolution image which can be scaled or repositioned for detail viewing
• Syntax<MultiScaleImage .../>
• The pictures need to be prepared using DeepZoom Composer
Media – MediaElement
• Hosts audio or video content• Syntax
<MediaElement Source=“URI”.../>
HTML display
– WebBrowser
HTML display - WebBrowser
• Provides a surface for displaying HTML content when the application is hosted outside the browser
• Syntax<WebBrowser .../>
• Useful propertiesSource
ResourcesStyles
Resource dictionaries
• A resource dictionary is a keyed dictionary of objects that can be used both in XAML and in code
• Resource dictionaries can exist as:– Immediate (page) resources– Application resources (App.xaml)– Separate XAML resource files
• Typically resources used for sharing objects as Styles, Brushes, Templates, Storyboards, Transforms, custom types, etc
• Every Silverlight element has Resources property that could be used for resources definition
Keys and resources
• The item within resource dictionary must have a key defined using x:Key attribute. The key must be unique inside particular resource dictionary
• Example<Page> <Page.Resources> <Style x:Key=“ButtonStyle” … /> <SolidColorBrush x:Key=“BlueBrush” … /> </Page.Resources></Page>
Resource scope• Resources defined in App.xaml file are application
resources - globally available in every page• Resources defined at <root user
control>.Resources are page resources – visible to all elements of the page
• Resources defined in Element.Resources – are element resources – visible to all children of the specific element
• Resources are resolved from bottom-up. From several resources with the same key the nearest to requested element will be taken
Referencing resources in XAML• StaticResource markup extension is used for referencing
resources in XAML• Syntax
property=“{StaticResource key}”• Example
<Page> <Page.Resources> <SolidColorBrush x:Key=“BlueBrush” … /> </Page.Resources></Page>…<Border Background=“{StaticResource BlueBrush}” …/><TextBox Foraground=“{StaticResource BlueBrush}” …/>
Referencing resources from code
• Every Silverlight element has FrameworkElement.Resources property of type ResourceDictionary
• ResourceDictionary class has string-keyed indexer:
Brush brush = (Brush)page.Resources[“key1”];App.Current.Resources[“s1”] = “test”;
Merged resource dictionaries• A merged resource dictionary enables you to declare the
contents of a resource dictionary by referencing an external file• Example
<Grid> <Grid.Resources> <ResourceDictionary> <SolidColorBrush Color="#d0157820" x:Key="muddyBrush"/> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/rd1.xaml" /> <ResourceDictionary Source="/rd2.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Grid.Resources> .... <Grid>
Styles• A Style is basically a collection of property
settings applied to single or multiple instances of the same type
• Every Silverlight element has a Style property (FrameworkElement.Style)
• Syntax<Style TargetType=“type”>
<Setter Property=“property” Value=“value”/>…
</Style>
Inline styles• Style could be defined directly for the element (inline)
<Border> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="Blue“/> <Setter Property="Width" Value="50“/> <Setter Property="Height" Value="50“/> </Style> </Border.Style></Border>
• Inline styles are useless, because properties could be set as attributes
• The real added value of styles is ability to reuse the same style over multiple elements. Such style are always defined inside Resources
Styles scope
• Style without x:key attribute is called implicit style and it is applied to all elements of specific type under resource container, except elements that have its own style. As result style without x:key defined in App.xaml applies to whole application
• Style with x:key applies only to elements that explicitly called to this style using StaticResource markup
Styles inheritance
• Style class has BasedOn property that can contain reference to another Style
• When a base style and the BasedOn style have the same property, the property value set in the BasedOn style is used
STANDARD CONTROLS AND STYLES EXERCISE
Day 3
• Data Binding• Templates• Custom Controls• Graphics, Transformations and Animations• Exercise
Data Binding
Understanding DataBinding• Data binding provides a simple way for Silverlight
applications to display and interact with data• The way data is displayed is separated from the
management of the data• A connection, or binding, between the UI and a
data object allows data to flow between the two• When a binding is established and the data
changes, the UI elements that are bound to the data can reflect changes automatically. Similarly, changes made by the user in a UI element can be reflected in the data object
Connecting UI Elements with Data• Every binding must specify a source and a target
• Direction (Mode)– OneTime - update the target with the source data
when the binding is created– OneWay - update the target with the source data
(default)– TwoWay - update both the target and the source
when either changes
Data Binding Syntax
• Markup extension<object property="{Binding …}" .../>
• {Binding path, oneOrMoreBindingProperties}– path – string representing the property path for
the binding. If not specified DataContext property is used
– Binding properties are specified as propertyName=value pairs separated by comma
DataContext• Data context is a concept that allows objects to
inherit binding-specifying information from their parents in the object tree
• Every control in Silverlight has DataContext property (FrameworkElement .DataContext)
• Example of usage:<StackPanel DataContext=“{Binding …}”>
<TextBlock Text=“{Binding}”/><TextBox Text=“{Binding}”/><Grid>
<TextBlock Text=“{Binding}”/></Grid>
</StackPanel>
Data Binding properties - Path
• Specifies the path to the binding source property
{Binding} = DataContext{Binding Name} = DataContext.Name{Binding Employee.FirstName} = DataContext. Employee.FirstName{Binding Path=Name} = DataContext.Name{Binding (Errors)[2].Message} = DataContext.Errors[2].Message
Data Binding properties - Mode
• Specifies the binding mode, as one of the following strings: OneTime, OneWay, or TwoWay.
{Binding path,Mode=OneTime}{Binding path,Mode=OneWay} – default{Binding path,Mode=TwoWay}
Data Binding properties - ElementName
• Specifies a data source by referencing another element by name
{Binding path,ElementName=name}
Data Binding properties – fall backs
• FallbackValue - Specifies a value to be assigned when the source path cannot be resolved{Binding path,FallbackValue=string}
• TargetNullValue - Specifies a value to be assigned when the source value is null{Binding path,TargetNullValue=string}
Data Binding properties – StringFormat
• Specifies the String format to use for display{Binding path,StringFormat=format}
• ExampleText=“{Binding Value, StringFormat=f2}”Displays: 50.12
Data conversions
• Data binding allows to perform two-way conversions during binding using classes implemented IValueConverter interface
• This interface exposes two methods:– Convert– ConvertBack
• The converter should be defined as Resource and referenced via {Binding Converter={StaticResource key}} markup
• Converters support a single converter parameter which can be specified using {Binding ConverterParameter=string} markup
Dependency Properties
• The purpose of dependency properties is to provide a way to compute the value of a property based on the value of other inputs
• Most properties of Silverlight elements are dependency properties
• Dependency properties are exposed as regular CLR properties, but the value of dependency property is stored differently.
Dependency Properties• CLR property usually backed by private field:
private string name;public string Name{
get { return name; }set { name = value; }
}
• Dependency properties are owned only by classes derived from DependencyObject class
• Dependency property must be registered and its identifier is stored as static readonly field in owner class
• The CLR wrapper of dependency property uses GetValue/SetValue methods of DependencyObject
Dependency Properties
public static readonly DependencyPropertyIsSpinningProperty =
DependencyProperty.Register( "IsSpinning", typeof(Boolean), typeof(SilverlightExampleClass), null );
public bool IsSpinning {
get { return (bool)GetValue(IsSpinningProperty); } set { SetValue(IsSpinningProperty, value); }
}
Dependency Properties
• A dependency property provides functionality that extends the functionality of regular CLR property:– Target of data binding– Property-Changed behavior – ability to notify
other objects when property is changed (implemented by DependencyObject class)
– Default value
INotifyPropertyChanged interface
• The ability of dependency property to notify other objects about its value change is relied on implementation of INotifyPropertyChanged interface
• This interface has a single event PropertyChanged that provides the name of changed property
• When source object of data binding is implementing INotifyPropertyChanged interface the changes in source object is automatically reflected by target of data binding
Data Annotation and Validation
• There are few CLR attributes that when applied on data source impact the display and validation behavior
• The data annotation attributes fall into three categories: validation attributes, display attributes, and data modeling attributes
• Data validation is processed by data binding
Data validation attributes
• CustomValidationAttribute• DataTypeAttribute• EnumDataTypeAttribute• RangeAttribute• RegularExpressionAttribute• RequiredAttribute• StringLengthAttribute
Data validation attributespublic class Product {
[Range(0, 5000)] public int ProductID { get; set; }
[Required] public string ProductName { get; set; }
[DataType(DataType.Currency)] public double ListPrice { get; set; }
[EnumDataType(typeof(ProductColor))] public ProductColor Color { get; set; }
}
Display attributes
• DataTypeAttribute• DisplayAttribute• DisplayColumnAttribute• DisplayFormatAttribute• FilterUIHintAttribute• UIHintAttribute• Display attributes are used by DataGrid control
Data modeling attributes
• AssosiationAttribute• ConcurrencyCheckAttribute• EditableAttribute• KeyAttribute• TimestampAttribute
Validation controls (SDK)
• ValidationSummaryDisplays a summary of the validation errors on a form
• DescriptionViewerDisplays a description and tracks error state for an associated control
• LabelDisplays a caption, required field indicator, and validation error indicator for an associated control.
• Validation properties of Data BindingValidatesOnNotifyDataErrors, ValidatesOnDataErrors, ValidatesOnExceptions, NotifyOnValidationError
Custom validation• Data object may implement IDataErrorInfo or INotifyDataErrorInfo
interfaces in order to provide custom validation logic• IDataErrorInfo interface
Provides simple object validation– Syntax
string this[ string columnName ] { get; }Returns error if property has invalid value
• INotifyDataErrorInfo interfaceProvides more complex validation scenarios– Syntax
IEnumerable GetErrors( string propertyName )bool HasErrors { get; }event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged
• Both interfaces are supported by data binding and validation controls
Templates
Control Templates• Every Silverlight control has Control.Template
property that specifies ControlTemplate class object
• ControlTemplate specifies the visual structure and visual behavior of control
• Every standard Silverlight control has default template defined by Microsoft and published in MSDN
• Defining an alternative ControlTemplate allows customization of control representation without effecting the control logic
Controls used in ControlTemplate• You can use any Silverlight standard or custom
controls inside of ControlTemplate• There is a special controls ContentPresenter and
ItemsPresenter that displays the content of template owner
• You can use binding markups inside ControlTemplate• There is a special binding markup TemplateBinding
that allows to make binding to the property of template owner
• There is a good practice to define control template as part of style for achieving reuse
Defining control appearance according to visual states
• Many standard and custom controls define different visual states as part of controls definition. For example Button has: Normal, MouseOver, Pressed, Disabled, Focused and Unfocused states. The states could be grouped by state groups
• Control template could define a different visual appearance of control for each state using VisualStateManager and VisualState controls
ContentControl
• Represents a control with a single piece of content of any type
• Syntax<ContentControl>
single child</ContentControl>
• ContentControl doesn’t have default visual template. Usually used for creating custom templated controls
ItemsControl
• Represents a control that can be used to present a collection of items
• Syntax<ItemsControl>
one or more items</ItemsControl>
or<ItemsControl ItemsSource=“binding”/>
• ItemsControl doesn’t have a default template for presenting items. The visual representation of items could be defined via ItemTemplate property of type DataTemplate
VirtualizingStackPanel
• Improves application performance when large number of items is used in ItemsControl
• Syntax<ItemsPanelTemplate> <VirtualizingStackPanel .../> </ItemsPanelTemplate>
• The improvement is achieved by generating only visible elements
Custom Controls
Customization in Silverlight
• Silverlight provides several ways for customization of existing controls or creating new controls:– Setting properties of existing control directly or
via styles– Overwriting ControlTemplate of existing control– Creating custom user control– Creating custom templated control
Custom user control• Reasons for creating custom user controls:– To separate functionality into smaller, manageable
pieces of logic that can be created independently from an application and other controls
– To group related controls that can be used more than once in an application
• Actually there is always at least one custom user control in each Silverlight application – the main page
• Custom user control can be reused in only in application in which it is created
Custom user control - structure
• Custom user control is combined from XAML file and code-behind file.
• It could contain standard and custom controls included in XAML file and refer these controls in code-behind
• It could contain resources• It could define dependency, attached
properties and events
CustomerEditor Example<UserControl x:Class="Training.CustomControls.CustomerEditor“ ….. Standard Namespaces ….. xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:local="clr-namespace:Training.CustomControls" x:Name="editor"> <UserControl.Resources> <local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></local:BooleanToVisibilityConverter> <Style TargetType="TextBox"> <Setter Property="Width" Value="100"></Setter> </Style> </UserControl.Resources> <StackPanel> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="5"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <sdk:Label Grid.Column="0" Grid.Row="0" Target="{Binding ElementName=FistName}"></sdk:Label> <TextBox Grid.Column="2" Grid.Row="0" x:Name="FistName" Text="{Binding FirstName}"></TextBox> <sdk:Label Grid.Column="0" Grid.Row="1" Target="{Binding ElementName=LastName}"></sdk:Label> <TextBox Grid.Column="2" Grid.Row="1" x:Name="LastName" Text="{Binding LastName}"></TextBox> <sdk:Label Grid.Column="0" Grid.Row="2" Target="{Binding ElementName=City}" Visibility="{Binding ShowAddress,ElementName=editor,Converter={StaticResource BooleanToVisibilityConverter}}"></sdk:Label> <TextBox Grid.Column="2" Grid.Row="2" x:Name="City" Text="{Binding City}" Visibility="{Binding ShowAddress,ElementName=editor,Converter={StaticResource BooleanToVisibilityConverter}}"></TextBox> <sdk:Label Grid.Column="0" Grid.Row="3" Target="{Binding ElementName=Address}" Visibility="{Binding ShowAddress,ElementName=editor,Converter={StaticResource BooleanToVisibilityConverter}}"></sdk:Label> <TextBox Grid.Column="2" Grid.Row="3" x:Name="Address" Text="{Binding Address}" Visibility="{Binding ShowAddress,ElementName=editor,Converter={StaticResource BooleanToVisibilityConverter}}"></TextBox> </Grid> <sdk:ValidationSummary></sdk:ValidationSummary> </StackPanel></UserControl>
CustomerEditor Example public partial class CustomerEditor : UserControl { public bool ShowAddress { get { return (bool)GetValue(ShowAddressProperty); } set { SetValue(ShowAddressProperty, value); } }
public static readonly DependencyProperty ShowAddressProperty = DependencyProperty.Register("ShowAddress", typeof(bool), typeof(CustomerEditor), new PropertyMetadata(true));
public CustomerEditor() { InitializeComponent(); } }
Custom templated controls
• These controls usually based (derived) from existing controls and extend its functionality
• These controls could be packed into separate DLL (library) and reused in multiple Silverlight applications
• Custom templated control is combined from code-behind file and template defined in Themes\Generic.xaml
Graphics Transformations Animations
Shape controls
• Silverlight provides number of “shape” controls that enables drawing of various shapes:– Ellipse– Line– Polygon– Polyline– Rectangle– Path
• All shape controls share the following properties:– Stroke – defines the brush for outline of shape– StrokeThickness – defines the thickness of stroke– Fill – defines the brush that fills the shape
Cropping objects
• You can crop an object by clipping out an area of the object's display. This is done by using the Clip property
• Clip property gets Geometryobjects:– EllipseGeometry– LineGeometry– RectangleGeometry– PathGeometry– GeometryGroup
Transforms
• Transforms allow to rotate, scale, skew and move Silverlight controls.
• Every Silverlight control derived from UIElement has RenderTransform property that could be set to one of transform classes:– RotateTransform – rotates an element
by the specified Angle– ScaleTransform – scales an element by
specified ScaleX and ScaleY amounts– SkewTransform – skews an element by
specified AngleX and AngleY amounts– TranslateTransform – moves an element
by specified X and Y amounts
Transforms cont.
• In order to create more complex transforms the following classes could be used:– CompositeTransform – applies multiple
transforms to the same object– TransformGroup – like CompositeTransform, but
allows to specify the order of transforms– MatrixTransform – allows creation of custom
transformations
3-D transforms
• Silverlight allows "perspective transforms" that provides 3-D effects
• 3-D transforms are applied via Projection property that should be set to PlaneProjection class
Animations• Silverlight animates objects by applying animations to individual
properties of object• Animations are executed by Storyboard objects (container for
animations)• Storyboard may contain animations or other nested storyboards:
– Simple animations• DoubleAnimation• ColorAnimation• PointAnimation
– Key frame animations• DoubleAnimationUsingKeyFrames• ColorAnimationUsingKeyFrames• PointAnimationUsingKeyFrames• ObjectAnimationUsingKeyFrames
Storyboard
• Container for animations• Syntax
<Storyboard>one of many animations
</Storyboard>• Useful methods
Begin, Stop, Pause, Resume• Useful attached properties
Storyboard.TargetName, Storyboard.TargetProperty• Useful properties
Duration• Useful events
Completed
DoubleAnimation• Animates the value of a Double property between two
target values using linear interpolation over a specified Duration
• Syntax<Storyboard>
<DoubleAnimation Storyboard.TargetName=“element”Storyboard.TargetProperty=“property”
From=“x” To=“y”/> </Storyboard>• Useful properties
AutoReverse, RepeatBehavior, Duration
ColorAnimation
• Animates the value of a Color property between two target values using linear interpolation over a specified Duration
• Syntax<Storyboard>
<ColorAnimation Storyboard.TargetName=“element”Storyboard.TargetProperty=“property”
From=“color1” To=“color2”/> </Storyboard>• Useful properties
AutoReverse, RepeatBehavior, Duration
PointAnimation
• Animates the value of a Point property between two target values using linear interpolation over a specified Duration
• Syntax<Storyboard>
<PointAnimation Storyboard.TargetName=“element”Storyboard.TargetProperty=“property”
From=“x1,y1” To=“x2,y2”/> </Storyboard>• Useful properties
AutoReverse, RepeatBehavior, Duration
Key frame animations
• Key-frame animations enable you to animate using more than two target values, and control an animation's interpolation method
• Key frame animation contains series of key frames. • The key-frame animation classes adhere to the
following naming convention:type_AnimationUsingKeyFrames
• For example: DiscreteDoubleKeyFrame, EasingDoubleKeyFrame, LinearDoubleKeyFrame, SplineDoubleKeyFrame
BINDING AND CUSTOM CONTROLS EXERCISE
Day 4
• UI interaction• Triggers• Hosting • Working with Services• Navigation Applications• Debugging Silverlight Applications• Unit Tests• Expression Suite• 3-rd party libraries
UI Interaction
Keyboard support• UIElement has 2 keyboard related events:
– KeyDown– KeyUp
• The element must be “in focus” in order to get these events• The handler for these events has the following syntax:
void KeyHandler(object sender, KeyEventArgs e)• KeyEventArgs.Key provides the pressed/released key• These events are “bubbling” events – go from bottom to top in
controls hierarchy. Setting KeyEventArgs.Handled to true stops event bubbling
• Some controls may handle key events and prevent its bubbling. For example TextBox, Button. Usually such controls provide their own events(TextBox.TextChanged, Button.Click, etc)
Mouse support• There are few mouse related events in UIElement:
– MouseMove– MouseEnter– MouseLeave– MouseLeftButtonDown– MouseLeftButtonUp– MouseRightButtonDown– MouseRightButtonUp– MouseWheel
• All mouse events provides mouse data of type MouseEventArgs (or derived from it) in their handler. This class provides mouse position and Handled property
• Some mouse events are routed (bubbling) events, that can be stopped by setting Handled property to true.
• Controls like Button hides mouse button events and provides its own Click event.
Drag & Drop support
• UIElement has AllowDrop property (false by default)
• Setting AllowDrop to true indicates that specific element can be drop target of drag-and-drop operations. In this case element starts getting: DragEnter, DragLeave, DragOver and Drop events
Isolated storage
• Silverlight application usually hosted by browser. This means it is running inside security sandbox and doesn’t have access to file system
• There is a special “safe virtual file system” provided to Silverlight application for its file operations – isolated storage
• Application works with isolated storage via IsolatedStorageFile class
• Isolated storage could be encrypted
Threading
• Silverlight application has one main application thread (UI thread) and can use additional threads
• BackgroundWorker and ThreadPool classes could be used for providing multithreaded in Silverlight application
• Any UI operations could be executed only in context of UI thread. For this purpose DependencyObject.Dispatcher property provides Dispatcher class that allows invoking methods calls in context of UI thread
Triggers
Event triggers• Silverlight supports only event triggers that can start storyboards in
response to an event• Syntax
<EventTrigger>one or more BeginStoryboard
</EventTrigger>• Example
<Rectangle …><Rectangle.Triggers>
<EventTrigger RoutedEvent=“Rectangle.Loaded”><BeginStoryboard>
<Storyboard …> … </Storyboard></BeginStoryboard>
</EventTrigger></Rectangle.Triggers>
</Rectangle>
Hosting
Silverlight plug-in
• Silverlight application is usually hosted by web browser• During Silverlight installation a special plug-in is
installed. This plug-in allows executing Silverlight application code
• Every Silverlight application is embedded into HTML page using <object> HTML tag:<object width="300" height="300"
type="application/x-silverlight-2" > <param name="source“ value=“app.xap"/>
</object> • Width and height of object defines the available screen
size of Silverlight application
Silverlight plug-in parameters• minRuntimeVersion – specifies minimal required
version of Silverlight<param name="minRuntimeVersion" value="version"/>
• initParams – sets user defined initialization parameters. These parameters are passed to Application_Startup method in App.xaml.cs<param name=" initParams" value=“k1=v1[,k2=v2,..,kn=vn]"/>
• splashscreensource – specifies alternative Splash screen to be displayed during application load <param name="splashscreensource" value="uri to XAML"/>
• There are more rear used parameters
Splash screens
• Silverlight plug-in includes default splash screen which is displayed when download of application takes more than 0.5 sec. The default splash screen displays percent of download
• Splash screen could be customized by providing an alternative XAML page resized in hosting Web site. This is page of type “Silverlight JScript page” – means does not have code-behind
• The URL for alternative splash screen is defined via splashscreensource parameter of Silverlight plug-in
Out-of-browser support• Silverlight application could be installed locally on user
machine and became out-of-browser application• Out-of-browser support is enabled by checking “Enable
running application out of browser” checkbox in project settings
• User installs application via menu provided by right-clicking on Silverlight application
• Out-of-browser application can run without network connection – offline
• If configured as trusted out-of-browser application may bypass some sandbox restrictions
• Application code may distinguish between running in-browser and out-of-browser by examining Application.IsRunningOutOfBrowser property
Out-of-browser special features
• Window manipulation – change size, minimize, maximize application window
• Window customization – trusted applications may hide title bar and window border
• HTML hosting – display HTML content within your application using WebBrowser class
• Notification windows – style Outlook e-mail notifications in task bar. NotificationWindow class
• File system access – trusted applications can access files out of isolated storage
Updates of out-of-browser apps
• Regular Silverlight application is always running its latest version – Silverlight plug-in compares version of XAP stored in browser cache with XAP on the server
• Out-of-browser application must provide its own logic for upgrades. Application class has few related methods and events: CheckAndDownloadUpdateAsync method, CheckAndDownloadUpdateCompleted event
HTML bridge
In Silverlight, the HTML Bridge is an integrated set of types and methods that enable you to do the following:– Expose complete managed types to JavaScript for
scripting.– Expose individual methods of managed types to JavaScript
for scripting– Pass managed types as parameters to JavaScript functions
and objects– Return managed types from JavaScript– Assign managed types as event handlers, which are
callable from JavaScript– Call JavaScript event handlers from managed types
Working with Services
Silverlight networking options
• HTTP classes – Silverlight supports HttpWebRequest/HttpWebResponse and WebClient classes from System.Net namespaceThese classes are useful for accessing REST or raw HTTP services
• Proxy classes – these classes are generated by Visual Studio by adding reference to SOAP Web service or WCF service
• Sockets – Silverlight supports Socket class from System.Net.Sockets namespace which allows adding UDP/TCP/Multicast communication to Silverlight application
Navigation Applications
Navigation between pages
• Regular Silverlight application has a single “main page” - the user control specified as RootVisual in Application_Startup of App.xaml.cs
• This “main page” may contain other user controls and may provide interaction behavior by hiding or dynamically creating these user controls
• Other option is reassigning of RootVisual to other control upon user action or other logic
Navigation in Silverlight 4.0
• In Silverlight 4.0 two new controls were supported: Frame and Page
• Page represents discrete section of content• Frame acts as container for Page controls• At any time Frame displays content of single page• Usually you are creating “main page” and set it as
RootVisual. The main page contains permanent UI – which is not changed during navigation and one or more frames
• The navigation (changing a page displayed in the frame) could be done through user action (HyperlinkButton) or programmatically (Source property, Navigate, GoBack, GoForward methods)
Uri mapping
• Browser address bar reflects the current page URL when navigation is used
• Frame control supports Uri mapping that allows to map certain pattern to specific Url
• Example: /Home is actually /Views/Home.xaml• The mapping is defined using UriMapper
property of Frame that gets collection of UriMapping classes
Debugging Silverlight Applications
Unit Tests
Expression Suite
3-rd Party Libraries