2

我想加載一個Silverlight項目來讀取每個XAML文件,方法是使用每個XAML類的反射Activator.CreateInstance來創建一個實例來讀取其控件。如何動態加載XAML獲取控件信息

C#代碼:

string strPath = "SilverlightUI.dll"; 
StreamResourceInfo sri = Application.GetResourceStream(new Uri(strPath, UriKind.RelativeOrAbsolute)); 
AssemblyPart assemblyPart = new AssemblyPart(); 
Assembly assembly = assemblyPart.Load(sri.Stream); 
Type[] typeArray = assembly.GetExportedTypes(); 

foreach (Type type in typeArray) 
{ 
    object ctl = (object)Activator.CreateInstance(type); 
    // Following exception is occurring while creating an instance using above line of code 
    // Exception "Cannot find a Resource with the Name/Key ComboBoxStyle" 
} 

或許,反思是不是能夠識別的Silverlight風格ComboBoxStyle。我怎麼可能創建一個實例動態讀取XAML文件中的每個控件?

回答

2

在與Google拼搏之後,我設法找到了解決我的問題所需的解決方案。

  1. 複製所有樣式資源的Silverlight項目(擬裝入)。
  2. 粘貼他們在主/來電的Silverlight項目或應用,這是使用反射代碼來加載的App.xaml Silverlight的控制信息

執行這些步驟將消除XAML解析例外失蹤風格

找不到與名稱/密鑰ComboBoxStyle

參考資源:XAML Parser cannot find resource within dynamically loaded XAP when creating form instance

-1

我能夠使用XamlReader類加載自定義控件。
我正在使用包含控件的XAML的純字符串,而不像您的反射想法。

//string xaml = "<...>"; 
var content = XamlReader.Load(xaml) as FrameworkElement; 
this.scrollViewer.Content = content; 

類型XamlReaderSystem.Windows.Markup

如果在您的情況下可以嘗試從您的程序集中獲取XAML資源並將它們讀取到字符串中。然後使用提供的代碼。在獲得content變量後,您可以使用Silverlight API執行任何操作。
希望這會幫助你。