Resources in WPF

Windows Presentation Foundation (WPF) resources provide a simple way to reuse commonly defined objects and values. Resources in WPF allow you to set the properties of multiple controls at a time. For example you can set the background property on several elements in a WPF application using a single resource.
The best way of defining the resources is on a Window or Page element level. Any resource that you define for an element also applies to their child elements of that element. For example if you define a resource for a Window element that has a Grid as a child element, then the resources defined for the window elements can also be used by the grid element. However, if you define a resource for the grid element, then the resource applies only to the child elements of the grid element.
Syntax for resources in WPF as follows
<elementName propertyName="{markupExtension keyName}">
<!-Content -->
</elementName>
elementName: Name of the element that uses the resource
propertyName: Name of the property that takes its value from the resource
markupExtension: Define type of resource
keyName: key name of the resource, which is unique string to identify the resource
There are two types of resource, namely

Let's see basics of both resources

Static Resource
We should use the StaticResource markup extension to define the resource as a static resource. The value of StaticResource is determined at the time of loading.
Let's have a sample program, Add the below code snippet in Window1.xaml file inside the Grid
  1. <Grid.Resources>
  2. <SolidColorBrush x:Key="lblbgcolor" Color="Blue"/>
  3. </Grid.Resources>
  4. <Label Name="lbl" Margin="71,44,77,0" Background="{StaticResource lblbgcolor}" Height="49" />

Above code, Grid control uses the Resources property (<Grid.Resources>) to define resource. SolidColorBrush resource named lblbgcolor defined. lblbgcolor resource is used to set the background property of lable.

Dynamic Resource
Dynamic Resource we use in a situation where we want to change the value of property at run time.
Let's have a sample program, Add the below code snippet in Window1.xaml file inside the Window element>
  1. <Window.Resources>
  2. <SolidColorBrush x:Key="brush" Color="Red" />
  3. </Window.Resources>
  4. <Button x:Name="btn" Content="Click Me" Click="Button_Click" Background="{DynamicResource brush}" Height="100" Width="100" />

Open Code behind and add the following code snippet

  1. private void Button_Click(object sender, RoutedEventArgs e)
  2. {
  3. this.btn.SetResourceReference(BackgroundProperty, "brush");
  4. }

Above code, Window control uses the Resources property (<Window.Resources>) to define resource. SolidColorBrush resource named brush defined. brush resource is used to set the background property of button.

Conclusion
I have covered basics of resources in WPF. I hope this will helps all the beginners to startup.
Reference
Dreamtech: WPF in simple steps