如何:处理大型 XAML 文件

XAML 能够表示复杂的数据结构。 因此,一些 XAML 文件可能会变得非常大。 例如,向量图像的 XAML 表示形式可能会有几个 MB 大小。 大型 XAML 文件可能会在 适用于 Visual Studio 的 WPF 设计器中产生性能问题。 下列过程可以帮助您处理由大块 XAML 导致的性能问题。

仅限 XAML 视图

在 Visual Studio 中处理大型 XAML 文件时,改进性能的最佳方法就是不在 WPF 设计器中使用设计视图。 在不使用设计视图时,可通过两种方法在 Visual Studio 中编辑 XAML。

第一种方法是关闭设计视图并且仅使用 XAML 视图。 可以通过更改**“文本编辑器”选项来指定 XAML 文件只应当在完整的 XAML 视图中打开。 通过使用此方法,可以获得完全的 XAML 编辑支持、“文档大纲”**窗口和标记导航器。

第二种方法是使用源代码编辑器。 可以使用**“打开方式”对话框,在源代码编辑器中打开 XAML 文件。 这是最轻量的方法,该方法为大型 XAML 文件提供最佳性能。 您将获得完全的 XAML 编辑支持,但是将看不到“文档大纲”**窗口和标记导航器。

在完整的 XAML 视图中打开 XAML 文件

在源代码编辑器中打开 XAML 文件

  1. 在**“解决方案资源管理器”**中右击该 XAML 文件将其打开。

  2. 从快捷菜单中选择**“打开方式”**。

  3. 在**“打开方式”对话框中选择“源代码(文本)编辑器”,然后单击“确定”**。

    该 XAML 文件将在代码编辑器中打开。

“设计”视图

可以使用设计视图来处理大块 XAML,但可能会遇到性能问题。 下面的建议可以帮助您改进性能。

改进在设计视图中处理大块 XAML 时的性能

  • 将大块 XAML 移到一个单独的 UserControl 中。 通过使用此方法,可以将大型 XAML 文件添加到设计图面上,而不会对性能造成太大影响。

  • 将大块 XAML 移到一个 XAML 资源文件中。 如果此资源文件与自定义控件相关联,则大型 XAML 文件将仅在设计器打开自定义控件时加载。

  • 重新构造 XAML 以最小化包括大块 XAML 的更新。

    下面的代码示例说明一个 Canvas 元素,该元素中包含一个描述图像的大块 XAML。 更改该元素的某个同级按钮控件会强制更新父网格及其所有的子级。 更新具有大块 XAML 的 Canvas 元素可能会降低性能。

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://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 元素。

请参见

参考

“选项”对话框 ->“文本编辑器”->“XAML”->“格式设置”

概念

WPF 设计器和 Silverlight Designer 加载失败疑难解答

其他资源

WPF 设计器中的 XAML 和代码

在 WPF 设计器中调试和解释错误