В языке XAML предусмотрена возможность представления сложных структур данных. В результате некоторые XAML-файлы могут стать очень большими.Например, представление XAML векторного изображения может занимать несколько мегабайт. Большие XAML-файлы могут вызвать проблемы с производительностью в Конструктор WPF для Visual Studio. Следующие процедуры могут помочь в решении проблем с производительностью, вызванных большими блоками кода XAML.
Наилучшим способом повышения производительности при работе с большими XAML-файлами в Visual Studio является не использование представления конструктора в сред. Конструктор WPF. Предлагаются два способа редактирования кода XAML в среде Visual Studio без использования представления конструктора.
Первым способом является отключение представления конструктора и использование только представления XAML. Для указания того, что XAML-файлы должны открываться в полном представлении XAML, достаточно изменить параметр Текстового редактора. При использовании этого подхода предоставляется полная поддержка редактирования XAML, окно Структура документа и навигатор по тегам.
Второй способ заключается в использовании редактора исходного кода. XAML-файлы можно открыть в редакторе исходного кода с помощью диалогового окна Открыть с помощью. Это наиболее простой способ, обеспечивающий наилучшую производительность для больших XAML-файлов.Обеспечивается полная поддержка редактирования кода XAML, но окно Структура документа и навигатор по тегам не отображаются.
Открытие XAML-файлов в полном представлении XAML
-
Установите флажок Всегда открывать документы в полном представлении XAML в параметрах Текстового редактора для XAML.Дополнительные сведения см. в разделе Страница "Форматирование", папка XAML, папка "Текстовый редактор", диалоговое окно "Параметры".
При следующем открытии XAML-файла он будет открываться только в представлении XAML.
Открытие файлов XAML в редакторе исходного кода
-
В обозревателе решений щелкните правой кнопкой мыши XAML-файл, чтобы открыть его.
-
В контекстном меню выберите Открыть с помощью.
-
В диалоговом окне Открыть с помощью выберите Редактор исходного текста и нажмите кнопку OK.
XAML-файл открывается в редакторе кода.
Представление конструктора можно использовать для работы с большими блоками кода XAML, но это может вызвать проблемы с производительностью. Следующие рекомендации могут повысить производительность.
Повышение производительности представления конструктора при работе с большими блоками кода XAML
-
Переместите большой блок кода XAML в отдельный элемент UserControl. Используя этот способ, можно добавить большой XAML-файл на поверхность разработки с минимальными затратами производительности.
-
Переместите большой блок XAML в файл ресурсов XAML. Если этот файл ресурсов связан с пользовательским элементом управления, большой XAML-файл загружается, только когда конструктор открывает пользовательский элемент управления.
-
Реструктурируйте код XAML, чтобы снизить до минимума число обновлений, включающих большие блоки XAML.
В следующем примере кода показан элемент Canvas, содержащий большой блок XAML с описанием изображения. Изменение одного из его родственных элементов управления "кнопка" заставляет обновляться родительскую сетку и все его дочерние узлы. Обновление элемента Canvas с большим блоком XAML может привести к снижению производительности.
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="300" Width="300"> <Grid> <Canvas> <!-- Many paths describing an image. --> </Canvas> <Button /> <Button /> <Button /> </Grid> </Window>
В следующем коде демонстрируется реструктуризация предыдущего кода XAML для устранения проблем с производительностью.
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="300" Width="300"> <Grid> <Canvas> <!-- Many paths describing an image. --> </Canvas> <Grid> <Button /> <Button /> <Button /> </Grid> </Grid> </Window>
Элементы управления "кнопка" больше не являются родственными элементу Canvas, и изменения одной из кнопок не приведут к обновлению элемента Canvas.