2

我正在尝试加载一个 Silverlight 项目来读取每个文件,方法是使用每个类的XAML反射创建一个实例来读取其控件。Activator.CreateInstanceXAML

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 文件中的每个控件?

4

2 回答 2

2

在与 Google 苦苦挣扎后,我设法找到了解决问题所需的解决方案。

  1. Silverlight项目中复制所有样式资源(用于加载)。
  2. 将它们粘贴到使用反射代码加载 Silverlight 控件信息App.xaml的 Master/Caller Silverlight项目或应用程序中

遵循这些步骤将消除缺少Style的XAML Parse Exception

找不到具有名称/键 ComboBoxStyle 的资源

参考:创建表单实例时,XAML Parser 在动态加载的 XAP 中找不到资源

于 2012-02-08T15:18:52.807 回答
-1

XamlReader我能够使用该类加载自定义控件。
我正在使用包含控件 XAML 的纯字符串,这与您的反射想法不同。

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

类型XamlReaderSystem.Windows.Markup.

如果您的情况可能,您可以尝试从程序集中获取 XAML 资源并将它们读入字符串。然后使用提供的代码。获得content变量后,您可以使用 Silverlight API 对控件执行任何操作。
希望这会帮助你。

于 2012-02-08T09:07:19.883 回答