HOW TO:處理大型 XAML 檔案

更新:2007 年 11 月

XAML 能夠表示複雜的資料結構。因此,部分 XAML 檔案可能會變得很大。例如,向量影像的 XAML 表示可能有幾個 MB 這麼大。大型 XAML 檔案可能會在 Windows Presentation Foundation (WPF) Designer for Visual Studio 中導致效能問題。下列程序可協助您處理大型 XAML 區塊導致的效能問題。 

僅 XAML 檢視

當您在 Visual Studio 中處理大型 XAML 檔案時,改善效能的最佳方式就是不要使用 WPF 設計工具中的 [設計] 檢視。在 Visual Studio 中編輯 XAML 而不使用 [設計] 檢視的方式有兩種。

第一種方式是關閉 [設計] 檢視,只使用 [XAML] 檢視。您可以變更 [文字編輯器] 選項,指定 XAML 檔案只能在完整的 [XAML] 檢視中開啟。藉由使用這種方式,您就能有完整的 XAML 編輯支援、[文件大綱] 視窗和標記導覽。

第二種方式是使用原始程式碼編輯器。您可以使用 [開啟方式] 對話方塊,在原始程式碼編輯器中開啟 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.Window1"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <Grid>
            <Canvas>
                <!-- Many paths describing an image. -->
            </Canvas>
            <Button />
            <Button />
            <Button />
        </Grid>
    </Window>
    

    下列程式碼顯示如何重組前面的 XAML 結構,以避免發生效能問題。

    <Window x:Class="WpfApplication2.Window1"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <Grid>
            <Canvas>
                <!-- Many paths describing an image. -->
            </Canvas>
    
            <Grid>
                <Button />
                <Button />
                <Button />
            </Grid>
        </Grid>
    </Window>
    

    按鈕控制項不再是 Canvas 項目的同層級,而變更其中一個按鈕也不會強制 Canvas 項目更新。

請參閱

概念

WPF 設計工具載入失敗移難排解

參考

選項對話方塊、文字編輯器、XAML、格式

其他資源

WPF 設計工具中的 XAML 和程式碼

WPF 設計工具的錯誤偵錯和解譯