Как объекты WPF, полученные из Freezable, могут быть заморожены в XAML? - PullRequest
28 голосов
/ 29 апреля 2009

Многие типы в WPF происходят от Freezable. Он обеспечивает неизменность для изменяемых объектов POCO и позволяет повысить производительность в определенных ситуациях.

Итак, мой вопрос, как я могу заморозить объекты в разметке XAML?

(обратите внимание, что я отправил аналогичный, но другой вопрос тоже).

Ответы [ 2 ]

42 голосов
/ 29 апреля 2009

Чтобы заблокировать объект Freezable, объявленный в разметке, вы используете атрибут Freeze, определенный в пространстве имен XML http://schemas.microsoft.com/winfx/2006/xaml/presentation/options.

В следующем примере SolidColorBrush объявлен как ресурс страницы и заморожен. Затем он используется для установки фона кнопки.

<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>

Источник: Обзор замораживаемых объектов

11 голосов
/ 29 апреля 2009

Добавьте это к своим объявлениям пространства имен xaml:

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

затем включите этот атрибут в ваши замораживаемые объекты

po:Freeze="True"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...