Практическое руководство. Обработка больших XAML-файлов

В языке 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 в редакторе исходного кода

  1. В обозревателе решений щелкните правой кнопкой мыши XAML-файл, чтобы открыть его.

  2. В контекстном меню выберите Открыть с помощью.

  3. В диалоговом окне Открыть с помощью выберите Редактор исходного текста и нажмите кнопку 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.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=29624