How can WPF objects deriving from Freezable be frozen in XAML?
Asked Answered
C

2

32

Many types in WPF derive from Freezable. It provides immutability to mutable POCO objects and allows for improved performance in certain situations.

So my question is, how can I freeze objects in XAML markup?

(Note that I have posted a similar but different question too).

Cockadoodledoo answered 28/4, 2009 at 21:26 Comment(2)
Does this really improve performance? Is there a way to measure the differences between a WPF app without and with po:Freeze="True" set all over the place?Rocher
@AlexandruDicu it can make a big difference depending upon what your so is doing. To verify, you'd need to get before and after CPU traces and compare them.Cockadoodledoo
B
45

To freeze a Freezable object declared in markup, you use the Freeze attribute defined in XML namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation/options.

In the following example, a SolidColorBrush is declared as a page resource and frozen. It is then used to set the background of a button.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" 
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="po">

  <Page.Resources>
    <!-- This brush is frozen -->
    <SolidColorBrush x:Key="MyBrush" po:Freeze="True" Color="Red" />
  </Page.Resources>

  <!-- Use the frozen brush -->
  <Button Background="{StaticResource MyBrush}">Click Me</Button>

</Page>

Source: Freezable Objects Overview

Beauty answered 29/4, 2009 at 12:16 Comment(1)
Shouldn't the last attribute be mc:Ignorable="po"?Dipietro
Q
14

Add this to your xaml namespace declarations:

xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="po"

then, in your freezable objects, include this attribute

po:Freeze="True"
Quadri answered 29/4, 2009 at 11:17 Comment(2)
Where does the 'mc' namespace come from?Cockadoodledoo
Oh, i think i missed that. Fixed it now.Quadri

© 2022 - 2024 — McMap. All rights reserved.