Top Banner
WPF Templates and Styles ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy http://schoolacademy.teler ik.com Technical Trainer http://www.minkov.it http://schoolacademy.telerik.com
30

ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy Technical Trainer .

Jan 17, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

WPF Templates and Styles

ControlTemplate and DataTemplate

Doncho Minkov

Telerik School Academyhttp://schoolacademy.telerik.com

Technical Trainerhttp://www.minkov.it

http://schoolacademy.telerik.com

Page 2: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Table of Contents Templating in WPF

Control Template

Data Templating Styling Triggers Resource Dictionaries

Page 3: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Templating in WPF

Page 4: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Templating in WPF

Two kinds of templates in WPF ControlTemplate and DataTemplate

ControlTemplate is used for the visualization of the control itself

DataTemplate is used to present the content of the control

Page 5: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Control TemplateHow to Control the Appearance?

Page 6: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Control Templating

Controls in WPF are separated into: Logic

Defines the states, events and properties

Template Defines the visual appearance of the

control

The wireup between the logic and the template is done by DataBinding

Page 7: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Control Templating (2) Each control has a default template

This gives the control a basic appearance

The default template is typically shipped together with the control and available for all common windows themes

It is by convention wrapped into a style Identified by value of the DefaultStyleKey property that every control has

Page 8: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Control Templating (3) The template is defined by a dependency property called Template The appearance of a control can be

completely replaced by setting this to another instance

The ControlTemplate is often included in a style that contains other property settings

Page 9: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Control Template Example

ContentPresenter presents the Content of the Control

<ControlTemplate TargetType="Button" x:Key="EllipseButton"> <Grid> <Ellipse Fill="Pink" Stroke="Red" Opacity="0.5"/> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid></ControlTemplate>

<Button Content="Click" Template="{StaticResource EllipseButton}" />

Page 10: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Control Template

Live Demo

Page 11: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Data Templating

Page 12: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Data Template DataTemplates are a similar concept as ControlTemplate Give you a very flexible and

powerful way to replace the visual appearance of a data item

Controls like ListBox, ComboBox or ListView

If you don't specify a data template WPF takes the default template

that is just a TextBlock

Page 13: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Data Template (2) If you bind complex objects to the control, it just calls ToString() on it Within a DataTemplate, the DataContext is set to the data object

So you can easily bind to the data context to display various members of your data object

Page 14: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Data TemplateExample Without a DataTemplate you just see the result of calling ToString() on the object. With the data template we see the

name of the property and a TextBox that even allows us to edit the value

<DataTemplate> <Border BorderBrush="DarkBlue" CornerRadius="5"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Name}"/> <TextBlock Text="{Binding Age}"/> </StackPanel> </Border></DataTemplate>

Page 15: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Data Templating

Live Demo

Page 16: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

StylingLets Make it Shiny!

Page 17: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

What is a Style? Style is a collection of property values that you can apply to an element in one step

Very similar to CSS standard in HTML WPF styles allow you to define a

common set of formatting characteristics

WPF styles limitations You can't share styles between

different elements Each element can inherit just one Style At least you can't do it the standard

way

Page 18: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Defining a Style Defining a Style for a Button Control

Inline in the <Control.Style> <Window.Resources> External Style file

18

<Button Content="This is Also BIG"> <Button.Style> <Style> <Setter Property="FontFamily" Value="Georgia"/> <Setter Property="FontSize" Value="40"/> </Style> </Button.Style></Button>

Page 19: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Applying Style Make a Button Control and set the Style Property

Style can be defined in Window.Resources:

19

<Button Style="{StaticResource BigButtonStyle}"x:Name="BigButtonExample" Content = "This is BIG!" />

<Window.Resources> <Style x:Key="BigButtonStyle" TargetType="Button"> <Setter Property="FontFamily" Value="Georgia"/> <Setter Property="FontSize" Value="40"/> <Setter Property="Padding" Value="20"/> </Style></Window.Resources>

Key

property

The target

control

The property we are

overriding

The new value

Page 20: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Styling Control There are 2 ways to customize a control For example: CircledButton

Using Styles

Using Templates

In both you have to override the ControlTemplate May lose some of the functionality

of the control

20

Page 21: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Styled Control Using Style

21

<Style x:Key="ButtonStyleColorful" TargetType="Button"> … <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Ellipse Stroke="Black" StrokeThickness="5" Fill="Blue"/> <TextBlock Foreground="Silver" Background="Transparent" Text="With Style"/> </ControlTemplate> </Setter.Value> </Setter></Style>

Page 22: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

WPF Styling

Live Demo

22

Page 23: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

TriggersDynamic Styles

Page 24: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Triggers Triggers define a list of setters that are executed if the specified condition is fulfilled Property Triggers

When a property gets a specified value

Event Triggers When a specified event is fired

Data Triggers When a binding expression reaches a

specified value 24

Page 25: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Triggers Example

25

<ControlTemplate> <Ellipse x:Name="Circle" Width="20" Height="20" Fill="Blue"/> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="Circle" Property="Fill" Value="Red"/> </Trigger> </ControlTemplate.Triggers></Controltemplate> The Property

of the affected element

Which element

the trigger will affect

When to execute the

trigger

Page 26: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

TriggersLive Demo

Page 27: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Resource DictionariesExternal Resources

Page 28: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Resource Dictionaries To avoid the length of code in one

place, a ResourceDictionary can be used Similar to the CSS external style files Add new ResourceDictionary to your

Project and put the Style / Template code inside

To access the Styles, Templates inside the ResourceDictionary:

28

<Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source= "Resources\CircledButtonDictionary.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary></Window.Resources>

Page 29: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Resource Dictionaries

Live Demo

Page 30: ControlTemplate and DataTemplate Doncho Minkov Telerik School Academy  Technical Trainer .

Questions?

WPF Templates and Styles