簡體   English   中英

如何使用XamlReader從程序集中的Xaml文件加載?

[英]How does use XamlReader to load from a Xaml file from within the assembly?

我已經在stackoverflow和互聯網的其余部分找到了一些有關如何從靜態文件加載Xaml的文章:他們建議創建一個XmlReader或StreamReader指向文件系統上找到的文件,但是我想要的.xaml文檔read from將與程序集的其余部分一起編譯,因此它將沒有有意義的文件Uri。 我不想在程序集所在的任何地方復制此文檔。 有沒有辦法從已編譯到程序集中的.xaml文檔中進行讀取?

我也知道我可以從代碼本身內部的一個很長的字符串文字中讀取內容,但是我不願意這樣做-Xaml產生的UIElement應該易於編輯,而我可以通過在Xaml文件中對其進行編輯來實現。

為了說明我的期望,下面是一個示例:

private void LoadUIElementFromCompiledXaml()
{
    XmlReader xmlReader = new XmlReader("*Uri for .xaml document within my assembly*");
    UIElement elementLoaded = (UIElement)XamlReader.Load(xmlReader);
}

如果答案很明顯,我預先表示歉意。

在可以從程序集中將Xaml作為嵌入式資源加載之前,必須進行一些設置。 我將帶您看一個示例,然后從那里可以自定義它以滿足您的需求。

  1. 在您的項目中創建文件夾。 將其命名為XAML。
  2. 將XAML文件添加到XAML文件夾。 讓我們將其稱為Sample.xaml。
  3. 右鍵單擊Sample.Xaml並選擇屬性。 將“生成操作”的值設置為“嵌入式資源”。
  4. 右鍵單擊項目,然后選擇屬性。 注意默認名稱空間值。 我們將使用它作為路徑的一部分。 對於此示例,假設它是“ MyNamespace。

您用於加載Xaml資源的代碼如下所示:

string defaultNamespace = "MyNamespace";
string folderName = "XAML";
string fileName = "Sample.xaml";

string path = String.Format("{0}.{1}.{2}", defaultNamespace, folderName, fileName);

using (Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(path))        
{
    object root = XamlReader.Load(stream);
}

如您所見,資源的路徑由項目的默認名稱空間,文件的文件夾路徑以及文件名組成。 如果文件夾路徑具有多個級別,請使用點作為文件夾分隔符來代替反斜杠。 例如,Xaml \\ Subfolder將是Xaml.Subfolder。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM