Silverlight импортирует App.xaml из динамически загруженного xap - PullRequest
1 голос
/ 14 сентября 2011

Есть ли способ получить доступ к ресурсам app.xaml импортированного файла XAP (из хост-приложения silverlight) ???

Или, что лучше, импортировать гостевой app.xaml в Host app.xaml

Проблема в том, что в импортированном приложении Silverlight я потерял все ресурсы app.xaml и просто вижу ресурсы хоста ... Я хотел бы объединить их ...

Это возможно?

Я загружаю XAP таким образом

private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    var manifestStream = Application.GetResourceStream(
        new StreamResourceInfo(e.Result, null),
        new Uri("AppManifest.xaml", UriKind.Relative));

    string appManifest = new StreamReader(manifestStream.Stream).ReadToEnd();
    string assemblyName =m_rootAssembly + ".dll";
    XmlReader reader = XmlReader.Create(new StringReader(appManifest));
    Assembly asm = null;
    while (reader.Read())
    {
        if (reader.IsStartElement("AssemblyPart"))
        {
            reader.MoveToAttribute("Source");
            reader.ReadAttributeValue();
            if (reader.Value == assemblyName)
            {
                var assemblyStream = new StreamResourceInfo(e.Result, "application/binary");
                var si = Application.GetResourceStream(assemblyStream, new Uri(reader.Value, UriKind.Relative));
                AssemblyPart p = new AssemblyPart();
                asm = p.Load(si.Stream);
                break;
            }
        }
    }

    if (asm == null)
        throw new InvalidOperationException("Could not find specified assembly.");

    var o = asm.CreateInstance(m_typeName);
    if (o == null)
        throw new InvalidOperationException("Could not create instance of requested type.");

    RaiseXapLoadedEvent(o);
}

1 Ответ

0 голосов
/ 30 июня 2014

если вы знаете URI файла ресурсов, например: «/COMPONENTNAME;component/resourcepath.xaml",

Вы можете просто добавить этот словарь ресурсов в свое приложение, написав такие коды: Application.Current.Resources.MergedDictionaries.Add("*resourceuri*");

«Application.Current» всегда указывает на экземпляр приложения времени выполнения (хост-приложение), независимо от того, где он используется.

...