Silverlight Feeds - All your Silverlight feeds in one place.

Sponsors

Saturday, July 25, 2009

What’s New In Silverlight 3 – Merged Resources

by jesseliberty via Jesse Liberty - Silverlight Geek on 7/25/2009 5:32:00 PM

Silverlight 3 provides the ability to manage your various resources in dedicated files and folders, and then merge them together as needed. This allows for far easier scaling of applications and easier reuse of resources.

It is easiest to see this at work by creating a small example. I’ll open a new application and name it MergedResources1 and I’ll create this one in VB.

To keep life simple, I’m going to use some of the resources I used in the based-on-styles discussion. I’ll create a simple layout with three buttons:

   1: <Button x:Name="Button1"
   2:         Content="Standard"
   3:         Grid.Row="0"
   4:         Grid.Column="1"
   5:         Style="{StaticResource StandardButton}" />
   6:   <Button x:Name="Button2"
   7:         Content="Big"
   8:         Grid.Row="1"
   9:         Grid.Column="1"
  10:         Style="{StaticResource BigButton}" />
  11: <Button x:Name="Button3"
  12:         Content="Big Font"
  13:         Grid.Row="2"
  14:         Grid.Column="1"
  15:         Style="{StaticResource BigFontButton}" />
  16:  

These are inserted into a two column grid.  Notice that three resources are called upon:

  • On line 5 we look for the StaticResource named Standard Button
  • Line 10 looks for the StaticResource named BigButton
  • Line 15 wants the StaticResource named BigFontButton

The BigFontButton style, however, uses a new resource:

   1: <Style x:Key="BigFontButton"
   2:     TargetType="Button"
   3:     BasedOn="{StaticResource BigButton}">
   4:    <Setter Property="FontFamily"
   5:        Value="Georgia" />
   6:    <Setter Property="FontSize"
   7:        Value="24" />
   8:    <Setter Property="Background"
   9:          Value="{StaticResource bBrush}" />
  10: </Style>
On lien 9 we declare that a BigFontButton will use a brush whose key is bBrush. 

Breaking Resources Into Files & Directories

In a Silverlight 2 application all these resources would be in App.xaml. As you move to larger and more complex applications it helps greatly to be able to organize your resources into folders. This allows you to deal with smaller files that are more clearly dedicated to a specific purpose; and it fosters reuse.

You accomplish this in Silverlight 3 by creating a folder of your resource files, and then merging in each resource dictionary where it is needed.  In this example, I’ll create a folder named resources, and place two files into it:

Resources

I’ll put the brush into Assets.xaml

   1: <ResourceDictionary
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   4:   <LinearGradientBrush x:Key="bBrush">
   5:     <GradientStop Color="Red" Offset="0" />
   6:     <GradientStop Color="Yellow"
   7:                   Offset="0.5" />
   8:     <GradientStop Color="Blue"
   9:                   Offset="1" />
  10:   </LinearGradientBrush>
  11: </ResourceDictionary>

I could of course create a set of brushes in this file. 

With that in place, I can create my stiles in Styles.xaml and when I want to use the Brush I just merge in the library…

   1: <ResourceDictionary
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:                     xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">
   5:   
   6:   <!-- Merge in the Assets dictionary -->
   7:   <ResourceDictionary.MergedDictionaries>
   8:     <ResourceDictionary Source="Assets.xaml" />
   9:   </ResourceDictionary.MergedDictionaries>
  10:   
  11:   <Style x:Key="StandardButton"
  12:          TargetType="Button">
  13:     <Setter Property="Width"
  14:             Value="100" />
  15:     <Setter Property="Height"
  16:             Value="35" />
  17:     <Setter Property="HorizontalAlignment"
  18:             Value="Left" />
  19:     <Setter Property="VerticalAlignment"
  20:             Value="Bottom" />
  21:   </Style>
  22:  
  23:    <!--Based on style -->
  24:    <Style x:Key="BigButton"
  25:          BasedOn="{StaticResource StandardButton}"
  26:          TargetType="Button">
  27:       <Setter Property="Width"
  28:             Value="150" />
  29:       <Setter Property="Height"
  30:             Value="50" />
  31:    </Style>
  32:  
  33:    <!--Based on style that uses brush from Asset.xaml-->
  34:    <Style x:Key="BigFontButton"
  35:        TargetType="Button"
  36:        BasedOn="{StaticResource BigButton}">
  37:       <Setter Property="FontFamily"
  38:           Value="Georgia" />
  39:       <Setter Property="FontSize"
  40:           Value="24" />
  41:       <Setter Property="Background"
  42:             Value="{StaticResource bBrush}" />
  43:   </Style>
  44:  
  45: </ResourceDictionary>

 

You’ve seen the based-on syntax (lines 25 and 36) before; what is new here is merging in the dictionary defined in Assets.xaml (lines 7-9) and then using that resource on line 42. 

Root It In App.xaml

Styles.xaml brings in Assets, but we’ll use App.xaml to bring in Styles.

   1: <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   2:              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   3:              x:Class="MergedResources.App">
   4:     <Application.Resources>
   5:        <ResourceDictionary Source="Resources/Styles.xaml" />
   6:   </Application.Resources>
   7: </Application>

 

Since App.xaml is brought in automatically, we now have it all.

 

Previous:  Multi-select ListBox    Next: Navigation

email it!bookmark it!digg it!

Original Post: What’s New In Silverlight 3 – Merged Resources

Legal Note

The content of the postings is owned by the respective author. Silverlight Feeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on Silverlight Feeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.

Advertise with us