本文將介紹三種方法用於在後台代碼中動態加載XAML,其中有兩種方法是加載已存在的XAML文件,一種方法是將包含XAML代碼的字符串轉換為WPF的對象。
這些是我在編寫RegeX時獲得的經驗,它們將會給WPF程序帶來更多的靈活性。
一、在資源字典中載入項目內嵌資源中的XAML文件
Application.Current.Resources.MergedDictionaries.Insert(0, Application.LoadComponent(new Uri("abc/Index.xaml", UriKind.Relative)) as ResourceDictionary);
此方法僅限於載入項目中包含的XAML資源文件,測試中載入項目以外的資源會提示找不到文件。
二、在資源字典中載入外部XAML文件
Application.Current.Resources.MergedDictionaries.Insert(0, XamlReader.Load(new FileStream("C:\\index.xaml", FileMode.Open)) as ResourceDictionary);
此方法適用於載入項目以外的XAML資源文件。
三、將XAML形式的字符串轉換為對象
XamlReader.Parse(@"<FlowDocument xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""><Paragraph><Run>Hi!</Run></Paragraph></FlowDocument>") as FlowDocument
此方法將生成一個流文檔對象,在RegeX中我就是通過這種方法來靈活的控制流文檔內容,以生成處理結果。
需注意的是,此方法需要.Net 3.5 SP1支持,此前好像是使用的Load方法的重載。
動態加載XAML文件技術非常適合用於資源載入,以此來實現語言切換、主題變換等功能。
動態轉換XAML字符串為WPF對象技術可為程序提供更為靈活的對象生成方式,這在一些復雜的情況下尤為實用。