Monday, November 03, 2008

Silverlight Themes

Inden vi går i gang så start her når du er færdig så tjek disse to links SILVERLIGHT IN STYLE og Toolkit release & Themes - er du færdig, så går vi i gang.

Efter at have læst de 3 blogs kan man se at man har 3 muligheder

  • Bruger en kontrol uden om ens layout grid
  • bruge en ressource uden om ens layout grid
  • Bruge Implicit Style Manger

Ingen af disse forslag tillader at man på en nem måde kan skinne sin applikation. Så det vi har brug for er en måde at gemme hvilken theme man ønsker og så loade det ved opstarten.  Et andet krav må være at koden til dette ikke skal ud i alle pages, men at det kan gøres vha. af arv eller ved at designe applikationen så alle pages bor i en rooth container som er themet

Page med standard theme

Alle silverlight kontroller har et standard theme som er pænt og meget neutralt. Og det skal det også være når man skal ramme alles smag.

image

Jeg har lavet en date picker usercontrol som jeg vil bruges som forsøgsdyr. XAML koden og layout kan sikkert gøres smartere. Men XAML er lidt af et bæst at komme i gang  med, men meget mere om det i kommende blogs.

XAML for DatePicker
<UserControl  x:Class="RamsiteSilverLight.BasePageThemeWithControl"
xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="196" Height="228" >
<
Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Center" VerticalAlignment="Center">
<
Grid Height="Auto" x:Name="InnerGrid" Width="Auto" HorizontalAlignment="Center"
VerticalAlignment="Center" Margin="2,2,2,2">
<
Grid.ColumnDefinitions>
<
ColumnDefinition Width="0.502*"/>
<
ColumnDefinition Width="0.498*"/>
</
Grid.ColumnDefinitions>
<
Grid.RowDefinitions>
<
RowDefinition Height="0.135*"/>
<
RowDefinition Height="0.748*"/>
<
RowDefinition Height="0.118*"/>
</
Grid.RowDefinitions>
<
TextBlock Grid.Row="0" VerticalAlignment="Center" Text="Select a Date"
TextWrapping="Wrap" Grid.Column="0" Grid.ColumnSpan="2" FontSize="16" HorizontalAlignment="Center"/>
<
basics:Calendar Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center"
VerticalAlignment="Center" Width="Auto" Grid.RowSpan="1"/>
<
Button x:Name="btnOK" Content="OK" Grid.Row="2" Grid.Column="0" Margin="2,2,2,2"/>
<
Button x:Name="btnCancel" Content="Cancel" Grid.Row="2" Grid.Column="1" Margin="2,2,2,2"/>
</
Grid>
</
Grid>
</
UserControl>


Themes med Theme Control


Lad os starte med det nemmeste. Det nye Silverlight toolkit indeholder en række kontroller som hvis de bruges som en container vil theme alle controller som de indeholder

image


Hvis man er glad for office's 2007 black theme eller det som bruges i blend så er dette lige sagen. Det skal siges at dette er ikke Dark versionen men Light version af blend temaet. XAML for DatePicker

<UserControl x:Class="RamsiteSilverLight.ThemeWithControl"
xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="196" Height="228" xmlns:expressionLight="clr-namespace:Microsoft.Windows.Controls.Theming;assembly=Microsoft.Windows.Controls.Theming.ExpressionLight">
<
Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Center" VerticalAlignment="Center">
<
expressionLight:ExpressionLightTheme>
<
Grid Height="Auto" x:Name="InnerGrid" Width="Auto" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2,2,2,2">
<
Grid.ColumnDefinitions>
<
ColumnDefinition Width="0.502*"/>
<
ColumnDefinition Width="0.498*"/>
</
Grid.ColumnDefinitions>
<
Grid.RowDefinitions>
<
RowDefinition Height="0.135*"/>
<
RowDefinition Height="0.748*"/>
<
RowDefinition Height="0.118*"/>
</
Grid.RowDefinitions>
<
TextBlock Grid.Row="0" VerticalAlignment="Center" Text="Select a Date" TextWrapping="Wrap" Grid.Column="0" Grid.ColumnSpan="2" FontSize="16" HorizontalAlignment="Center"/>
<
basics:Calendar Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" Grid.RowSpan="1"/>
<
Button x:Name="btnOK" Content="OK" Grid.Row="2" Grid.Column="0" Margin="2,2,2,2"/>
<
Button x:Name="btnCancel" Content="Cancel" Grid.Row="2" Grid.Column="1" Margin="2,2,2,2"/>
</
Grid>
</
expressionLight:ExpressionLightTheme>
</
Grid>
</
UserControl>

Download, download og mere download af Silverlight værktøjer

For at komme i gang skal der downloades en del. Start med at gå til det officelle Silverlight site og klik på Get Started.

Her er der en grundig trinvis vejledning til hvordan du kommer i gang. Et lille hint - spring ikke installationen af Expression Blend over, du får kraftigt brug for programmet.

Hvad så? ja så er vi i gang og du er sluppet af med 100 gig diskplads.

PS. hvis du har lyst til at se hvad fremtiden bringer for Silverlight herefter forkortet til SL, så gå til denne blog og læs om de mange videoer fra PDC08

Technorati Tags: ,,