none
WFP中如何通過加載xml文檔生成wpf界面 RRS feed

  • 問題

  • 各位前輩好
    小弟想把事先編好的XAML資料讀入WPF中,在於網路上尋找到下列代碼,但都無法載入成功,一直顯示"找不到資源 ''不知要如何修改,望請前輩指導!
    開發環境:Windows XP,VB2010

            Dim FilePath As String = "G:/Share/1.xml"
            Dim ur As Uri = New Uri("pack://application:,,,/" & FilePath)

            Dim s As Stream = Application.GetResourceStream(ur).Stream       <===這一段會顯示"找不到資源"

            Dim fe As FrameworkElement = TryCast(XamlReader.Load(s), FrameworkElement)
            Content = fe
    2013年11月8日 下午 06:59

解答

  • (1) 建議你先讀一下這份文件, 瞭解什麼叫 Pack URI

    (2) 如果你是要從一個獨立的 xaml file 中取得, 而非從打包好的檔案中存取, 那應該不是用 Pack URI

    抄別人程式碼前, 至少應該先查查資料看別人寫的內容究竟是什麼意義吧 ?

    XmlTextReader xmlreader = new XmlTextReader("D:\\Test\\UC01.xaml");
    UserControl  u = XamlReader.Load(xmlreader) as UserControl ;	
    grid.Children.Add(u);


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年11月9日 上午 04:16
    版主

所有回覆

  • (1) 建議你先讀一下這份文件, 瞭解什麼叫 Pack URI

    (2) 如果你是要從一個獨立的 xaml file 中取得, 而非從打包好的檔案中存取, 那應該不是用 Pack URI

    抄別人程式碼前, 至少應該先查查資料看別人寫的內容究竟是什麼意義吧 ?

    XmlTextReader xmlreader = new XmlTextReader("D:\\Test\\UC01.xaml");
    UserControl  u = XamlReader.Load(xmlreader) as UserControl ;	
    grid.Children.Add(u);


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年11月9日 上午 04:16
    版主
  • 您可以參考這個範例的做法:Creating and Loading XAML dynamically in WPF

    2013年11月9日 上午 10:11
  • 感謝兩位先輩的指導!

    雖然此問題得到解答了,但小弟還是不解的是為何不可以指定要的路徑,還請前輩指引,以下是原文。

    內容檔的 Pack URI 使用下列授權和路徑:

    • 授權:application:///。

    • 路徑:內容檔的名稱,包括其路徑 (相對於應用程式主要可執行組件的系統位置)。  <===是給路徑沒錯,但無法理解"相對於應用程式主要可執行組件的系統位置"這一句話的含意,都在本機中為何會讀取不到

    下列範例顯示 XAML 內容檔的 Pack URI;其中的內容檔位於與可執行組件相同的資料夾中。

    pack://application:,,,/ContentFile.xaml

    下列範例顯示 XAML 內容檔的 Pack URI;其中的內容檔位於應用程式之可執行組件的相對子資料夾中。

    pack://application:,,,/Subfolder/ContentFile.xaml

    2013年11月9日 下午 02:38
  • 有注意看這張圖嗎? 這很明顯說明 application:/// 是指向組件本身, 意即使用 Pack URI application:///可以找到的東西, 要不就在你原來的專案裡面, 不然就是你的專案所參考的組件專案裡面.內容的狀況則是, 這個檔是屬於這個專案的內容檔案, 但沒有包在組件中的.

    所以整個狀況就是 application:/// 的目錄結構基本上就是你在方案總管看到的樣子. 根目錄就是專案本身.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2013年11月9日 下午 04:25
    版主
  • 感謝先輩的指導!
    2013年11月10日 上午 01:43