How can I determine whether a Freezable Is Frozen?

This example shows how to determine whether a Freezable object is frozen. If you try to modify a frozen Freezable object, it throws an ’Invalid Operation’ Exception. To avoid throwing this exception, use the ‘IsFrozen’ property of the Freezable object to determine whether it is frozen. [C#] Button myButton = new Button(); SolidColorBrush myBrush = new SolidColorBrush(Colors.Yellow); if (myBrush.CanFreeze) { // Makes the brush unmodifiable. myBrush.Freeze(); } myButton.Background = myBrush; if (myBrush.IsFrozen) // Evaluates to true. { // If the brush is frozen, create a clone and // modify the clone. SolidColorBrush myBrushClone = myBrush.Clone(); myBrushClone.Color = Colors.Red; myButton.Background = myBrushClone; } else { // If the brush is not frozen, // it can be modified directly. myBrush.Color = Colors.Red;

What is a Freezable?

A Freezable is a special type of object that has two states: ’unfrozen’ and ’frozen’. When unfrozen, a Freezable appears to behave like any other object, and it can no longer be modified. It also provides a changed event to notify observers of any modifications to the object. it improves performance, because it no longer needs to spend resources on change notifications. A frozen Freezable can also be shared across threads, while an unfrozen Freezable cannot be shared across threads. The Freezable class makes it easier to use certain graphics system objects and can help improve application performance. To freeze a Freezable object declared in markup, you can use the PresentationOptions ‘Freeze’ attribute. 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. [XAML] <Page xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’ xmlns:PresentationOptions=’http://schemas.microsoft.com/winfx/2006/xaml/presentation/options’ xmlns:mc=’http://schemas.openxmlformats.org/markup-compatibility/2006′ mc:Ignorable=’PresentationOptions’> <Page.Resources> <!– This resource is frozen. –> <SolidColorBrush x:Key=’MyBrush’ PresentationOptions:Freeze=’True’ Color=’Red’ /> </Page.Resources> <StackPanel> <Button Content=’A Button’ Background='{StaticResource MyBrush}’> </Button> </StackPanel> </Page>

How to get the default template of a control programmatically ?

To get the Style for any given WPF control, get the control instance and use the ‘XAMLWriter’ class for writing the XAML related information. [C#] System.Windows.Controls.TextBox t = new System.Windows.Controls.TextBox(); StringBuilder sb = new StringBuilder(); using (TextWriter writer = new StringWriter(sb)) { System.Windows.Markup.XamlWriter.Save(t.Template, writer); }

How do I remove the Adorner from an element ?

1. Call the static method ‘GetAdornerLayer()’, to get the AdornerLayer associated with the UIElement. 2. Call the ‘Add()’ method to bind the Adorner to the target UIElement. [C#] AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(myTextBox); adornerLayer.Remove(new ControlAdorner(myTextBox));

How can I map CLR Namespaces to XML Namespaces in an Assembly ?

WPF defines a CLR attribute that is consumed by XAML processors in order to map multiple CLR namespaces to a single XML namespace. The ‘xlmns’ Definition Attribute is placed at the assembly level in the source code that produces the assembly. The WPF assembly source code uses this attribute to map the various common namespaces such as System.Windows and System.Windows.Controls to the http://schemas.microsoft.com/winfx/2006/xaml/presentation namespace. The ’xmlns’ Definition Attribute takes two parameters: the XML namespace name and the CLR namespace name. More than one ’xmlns’ Definition Attribute can exist to map multiple CLR namespaces to the same XML namespace. Once mapped, members of those namespaces can also be referenced without full qualification if desired, by providing the appropriate using statement in the partial-class code-behind page. For more details, see ’xmlns Definition Attribute’.