Как динамически загрузить XAML для получения управляющей информации - PullRequest
2 голосов
/ 08 февраля 2012

Я пытаюсь загрузить проект Silverlight для чтения каждого файла 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 ]

2 голосов
/ 08 февраля 2012

Мне удалось найти необходимое решение моей проблемы после борьбы с Google.

  1. Копирование всех ресурсов стиля из Silverlight проекта (предназначен для загрузки).
  2. Вставьте их в App.xaml Мастера / Абонента Silverlight проекта или приложения, которое использует код отражения для загрузки информации элементов управления Silverlight

Выполнение этих шагов устранит исключение синтаксического анализа XAML отсутствующего стиля .

Не удается найти ресурс с именем / ключом ComboBoxStyle

Ссылка: XAML Parser не может найти ресурс в динамически загруженном XAP при создании экземпляра формы

0 голосов
/ 08 февраля 2012

Мне удалось загрузить пользовательские элементы управления, используя класс XamlReader.
Я использую обычную строку, содержащую XAML элемента управления, не похожую на вашу идею отражения.

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

Тип XamlReader находится в System.Windows.Markup.

Если это возможно в вашем случае, вы можете попытаться получить ресурсы XAML из вашей сборки и прочитать их в строку. Затем используйте предоставленный код. После того, как у вас есть переменная content, вы можете делать что-либо, используя Silverlight API для элемента управления.
Надеюсь, это поможет вам.

...