2011-03-11 97 views
2

我試圖鏈接到外部文件,因爲不在編譯的silverlight應用程序中,用於我的資源字典。我希望能夠將'主題'放到我網站上的文件夾中,並且能夠使用它們,而無需每次創建新文件時重新編譯和上傳。Silverlight動態資源文件位置

我讓它成功地更改了資源,但我找不到一種鏈接到不在編譯的應用程序中的文件的方式。

這是我到目前爲止有:

private void BlueButtonClick(object sender, RoutedEventArgs e) 
{ 
    var s = App.GetResourceStream(new System.Uri("/DynamicDictionary;component/dict2.xaml", System.UriKind.Relative)).Stream; 
    var reader = new StreamReader(s); 
    var xaml = reader.ReadToEnd(); 
    var rdd = (ResourceDictionary)XamlReader.Load(xaml); 
    Resources.MergedDictionaries.Add(rdd); 
    VictoryIsMine(); 
} 

我希望能夠在「/DynamicDictionary;component/dict2.xaml」更改爲類似的「http://本地主機:9393 /dict2.xaml',但它給了我一個錯誤。

任何人有任何建議嗎?

*編輯**

這是給我下面的錯誤,當我嘗試與本地主機引用它:

{System.UriFormatException:一個相對 URI不能因爲創建 「uriString」參數表示絕對URI 。在 System.Uri.CreateThis(字符串URI, 布爾dontEscape,UriKind uriKind)
在System.Uri..ctor(字符串uriString中, UriKind uriKind)在 DynamicDictionary.MainPage.RedButtonClick(對象 發件人,RoutedEventArgs E)在 System.Windows.Controls.Primitives.ButtonBase.OnClick() 在 System.Windows.Controls.Button.OnClick() 在 System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)上 System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl,EventArgs e)at MS .Internal.JoltHelper.FireEvent(IntPtr的 unmanagedObj,IntPtr的unmanagedObjArgs, 的Int32 argsTypeIndex,的Int32 actualArgsTypeIndex,字符串 eventName的)}

+0

錯誤是什麼? – VoodooChild 2011-03-11 15:23:17

回答

3

有從文件外部來源它的直接的方式沒有實際的方式,你正在找。

你有兩個選擇,我知道的(不是說有沒有其他人,但是這是我怎麼看它典型的做法):

  1. 您可以使用MEF的DeploymentCatalog或採取Web客戶端和負載它作爲一個程序集,使用AssemblyParts解析它,然後創建資源字典引用並手動將其添加到應用程序的資源集合中

  2. 您可以使用WebClient獲取資源的XAML。然後,您可以使用XAML Loader加載並處理它,然後將其添加到資源集合中。這將是迄今爲止麻煩,但是,因爲你已經預見到XAML中引用的命名空間和一定要配置,並將其傳遞到XAML裝載機

雖然看起來「漂亮」是主題是在XAML, XAML不過是一個聲明式對象圖。在它下面,它是實際的代碼。所以您必須加載代碼才能使主題工作,將代碼添加到正在運行的部署中的唯一方法是將其解析爲動態添加的程序集,或者將XAML加載到進程空間並以此方式添加。

PS - 我看到您使用的是閱讀器,您可能會嘗試傳入UriKind.Absolute,而不是 - 如果這不起作用,請使用WebClient並以此方式傳遞文本。