Search content within the blog

Tuesday, November 29, 2011

Static vs Dynamic resources in WPF

A resource can be referenced as either static or dynamic resource.

The major difference between static and dynamic resources is “static resource will evaluate the resource only once while dynamic resource will be evaluated every time the resource needed”.

Dynamic resource has more performance overhead than static resources because it look up for resources every time it requested or needed.

Static resource is faster but it takes little more time to load page or window than dynamic resource because dynamic resources are loaded when you actually used those.

Below example gives you clear picture about Static and Dynamic resource markup extension.

XAML

<Window.Resources>
<SolidColorBrush Color="LightBlue" x:Key="buttonBackground" />
</Window.Resources>

<StackPanel Name="stkPanel">

<Button Name="Button1" Content="Button1"
Width="150" Height="40" Margin="5"
Background="{StaticResource buttonBackground}"/>

<Button Name="Button2" Content="Button2"
Width="150" Height="40" Margin="5"
Background="{DynamicResource buttonBackground}"/>

<Button Name="Button3" Content="Button3"
Width="150" Height="40" Margin="5"
Background="{StaticResource buttonBackground}"/>

</StackPanel>

Code behind

void StaticAndDynamicResources_Loaded(object sender, RoutedEventArgs e)
{
stkPanel.Resources["buttonBackground"] = Brushes.Yellow;
}

Output



As shown in above example, three buttons are using buttonBackground resource defined in windows.resources element. Button1 and Button3 are using static resource markup extension while button2 is using dynamic resource markup extension. After loading of my window, I have changed color of buttonBackground resource from Lightblue to Yellow in code behind. So when I run my application, Button2 will have yellow background and rest of the buttons will have LightBlue background. The reason behind for not changing background of Button1 and Button3 because both button uses static resource and static resource is loaded only once with application while button2 uses dynamic resource and it changes every time when it accessed.


Hope you liked this article. Please feel free to write feedback/comments in comment section below.

No comments:

Post a Comment