Wie erhalte ich ein ResourceDictionary aus einer XAML-Datei in einer dynamisch geladenen DLL?
Posted: 15 Jan 2025, 16:36
Ich habe eine DLL, die ein benutzerdefiniertes Avalonia-Steuerelement sowie dessen Standardstil und -ressourcen enthält.
Ich kann die DLL so dynamisch laden und das Steuerelement ohne Probleme verwenden:
Jetzt möchte ich den Standardstil und die Standardressourcen zu meinen Anwendungen hinzufügen, und das ist irgendwie sehr schwierig.
Ich kann einen StyleInclude und ResourceInclude aus meiner DLL, indem ich dies in IComponentPlugin einfüge:
Aber wenn ich versuche, es zu den Ressourcen meiner Anwendung hinzuzufügen, beschwert sich AvaloniaXamlLoader. „Für avares://DefaultResources.axaml/ (baseUri: avares://DefaultResources.axaml/) wurde kein vorkompiliertes es mit AvaloniaRuntimeXamlLoader aus dem Avalonia.Markup.Xaml.Loader-Paket:
Aber dann erhalte ich eine FileNotFoundException „Die Ressource avares://DefaultResources.axaml/ konnte nicht gefunden werden.“ Ich habe es auch mit „avares://Components/DefaultResources.axaml“ versucht, ohne Erfolg.
Wie füge ich die Ressourcen meiner Anwendung hinzu? ?
Ich kann die DLL so dynamisch laden und das Steuerelement ohne Probleme verwenden:
Code: Select all
var basePath = Directory.GetCurrentDirectory();
var dll = Assembly.LoadFile(Path.Combine(basePath, "Components.dll"));
foreach (var type in dll.GetExportedTypes())
{
if (type.IsAssignableTo(typeof(IComponentPlugin)))
{
var instance = Activator.CreateInstance(type);
if (instance is IComponentPlugin plugin)
{
// Do Stuff
}
}
}
Ich kann einen StyleInclude und ResourceInclude aus meiner DLL, indem ich dies in IComponentPlugin einfüge:
Code: Select all
public ResourceInclude? GetResources()
{
var uri = new Uri("avares://DefaultResources.axaml");
return new ResourceInclude(uri) { Source = uri };
}
public StyleInclude? GetStyle()
{
var uri = new Uri("avares://DefaultStyle.axaml");
return new StyleInclude(uri) { Source = uri };
}
Code: Select all
public Stream? GetResources()
{
return AssetLoader.Open(new Uri("avares://DefaultResources.axaml"));
}
Wie füge ich die Ressourcen meiner Anwendung hinzu? ?