Как объекты WPF, происходящие из Freezable, могут быть заморожены в XAML?
Многие типы в WPF происходят от Freezable
, Он обеспечивает неизменяемость изменяемых объектов POCO и позволяет повысить производительность в определенных ситуациях.
Итак, мой вопрос, как я могу заморозить объекты в разметке XAML?
(Обратите внимание, что я опубликовал похожий, но другой вопрос тоже).
2 ответа
Заморозить 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>
Источник: Обзор замораживаемых объектов
Добавьте это к своим объявлениям пространства имен 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"