2012-04-10 80 views
0

我發現如何通過使用XamlReader.Load()來編程解析/加載XAML字符串,但是如果我要讓用戶將一個「.xaml」文件拖放到我的Silverlight應用程序上,我該如何解析文件添加到XAML文件並將內容讀入字符串以提供XamlReader.Load()方法。Silverlight:以編程方式打開並讀取XAML文件?

或者是否有更高效/更好的方法通過使用反射?

我想允許用戶使用Silverlight設計人員(合理範圍內)使用「silverlight for dummies」來設計一個簡單的控件。 (即標籤和文本框)。 然後保存或導出爲XAML文件(或者我可以簡單地將它們保存爲TXT文件?) 然後,他們會將此文件放入我的Silverlight應用程序,它會將文本解析爲XamlReader.Load (),那麼我可以將我的新編程創建的對象添加到列表框。

我有阻力的邏輯/放文件,並加載了XAML字符串,但得到一個「的.xaml」文件的內容,那中間點就是我自己的困惑......上

編輯

@nicholas,這正是我的目標。我不知道昨天發生了什麼,但我認爲我只是有一個主要的「大腦放屁」。 這是我怎麼會去:(還是有一定的清理和重構,但是這是測試)

 IDataObject data = e.Data; 
     if (data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      FileInfo[] files = data.GetData(DataFormats.FileDrop) as FileInfo[]; 

      if (files.Length > 1) 
      { 
       //TODO 
      } 
      else 
      { 
       FileInfo file = files[0]; 
       extension = file.Extension; 
       string xaml = string.Empty; 
       using (Stream stream = file.OpenRead()) 
       { 
        xaml = StreamUtils.StreamToString(stream); 
       } 
       if (!xaml.IsEmpty()) 
       { 
        try 
        { 
         myListBox.Items.Add(XamlReader.Load(xaml); 
        } 
        catch (Exception ex) 
        { 
         //TODO 
        } 
       } 
      } 

回答

2

因此,您有一個Drop事件處理程序,從中您將收到帶有Data屬性的事件參數IDataObject。從MSDN你發現如何獲得FileStream爲下降的文件,然後你可以加載到一個字符串(例如使用StreamReader)由XamlReader.Load()解析。

1

如果我理解你正確地將有三個不同的步驟:

  • 解析的.xaml文件或文件的任何類型的內容變成「字符串」 (它可以是一個.txt文件或任何其他格式)
  • 使用XamlReader.Load(),以產生出此字符串 從步驟的UI元素1
  • 將步驟2中的UI元素插入到ListBox.Items集合

這有幫助嗎?