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

前端 未结 2 1695
南方客
南方客 2020-12-08 04:29

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

So

相关标签:
2条回答
  • 2020-12-08 04:59

    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

    0 讨论(0)
  • 2020-12-08 05: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"
    
    0 讨论(0)
提交回复
热议问题