.NET MAUI - Problem beim Einbinden einer Resource aus andere Assembly
Eigentlich war der Fehler sehr dämlich von mir, aber ich bin wegen der mir unbekannten Fehlermeldung nicht auf das gekommen, was eigentlich die Ursache war. Nachdem ich den Fehler Verstand, dachte ich, ich schreibe das mal auf als Blogeintrag. Aber andererseits habe ich auch zu dem Thema im Internet nichts gefunden.
Benötigt
- Visual Studio 2022
- Mindestens .NET 7
- .NET MAUI Application
- .NET MAUI Library
Was ist das Ziel?
Die Styles für die Steuerelemente, sollen über eine andere Assembly geliefert werden. Damit dies funktioniert, muss in der Application die Resource in der App.xaml eingetragen werden. Für das Beispiel ist in der Assembly eine Resource abgelegt mit einem Color Style, welches mit einem Key Wert gesetzt ist. In der Application soll dann der Style mit StaticResource einsetzbar sein.
Umfeld für Style aufbauen
In der Resource ist ein Style zu einem Color angelegt. Hier nehme ich eine Sache vorweg, hier fehlt die Klasse und komme im späteren Schritt wieder darauf zurück.
Damit meine Application darauf zugreifen kann, muss die Assembly in die Abhängigkeiten hinzugefügt werden.
Rechte Maustaste auf Dependencies und im Kontext Menü 'Add Project Reference'
Dann aus der Projektübersicht der Solution, die zu verwendende Bibliothek auswählen.
In der Anwendung muss in die Datei App.xaml die Reference händisch eingetragen werden. Automatische Vervollständigung funktioniert an der Stelle nur zum Teil.
Nun der Merge, um hier die Styles einzubinden. Das Unterstreichen zeigt uns an der Stelle ein Problem.
Am Anfang habe ich bereits erwähnt, dass in der Datei CodexzierTheme.xaml die Klasse fehlt.
Also bringen wie die Klasse noch ein.
Der Fehler in der Anwendung aus der Datei App.xaml ist nun weg.
Auf der MainPage.xaml, habe ich ein Rechteck, welches als Hintergrundfarbe den Style aus der Assembly bekommt. Leider lässt sich das nicht über die Autovervollständigung nicht eintragen.
Bis hier her, sieht die Sache in Ordnung aus, mit Ausnahme, dass die Ressource hier nicht gefunden wird über IntelliSense. Ich starte die Anwendung mit F5 und direkt nach dem Start erhalte ich bereits meinen Fehler, den ich bereits als Titelbild gewählt habe.
Was fehlt?
Eigentlich sollte klar sein, dass hier die Klasse selbst für die Resource fehlt. In WPF, Silverlight, UWP und XAML musste die Klasse nicht mit eingebunden werden. Bei Xamarin habe ich keine Erfahrungswerte.
Per Copy und Paste, habe ich meine ResourceDictionary Datei und nur Namentlich angepasst. Was ich zu diesen Punkt nicht wusste, dass im .NET MAUI zur ResourceDictionary ebenfalls eine Partial Klasse zugeordnet wird.
Nach dem ich zum testen eine ResourceDictionary aus dem .NET MAUI-Templates hinzugefügt habe, war schon gleich der unterschied zu sehen.
Nachdem ich dies so übernahm, ging auch der Aufruf über IntelliSense …
… und die Anwendung ließ sich dann starten mit der gewünschten Farbe aus dem Style.
Schlusswort
Wenn das auf der Microsoft Seite so steht, dann funktioniert das auch in der Regel. Das wäre mir auch neu gewesen, wenn eine Beschreibung nicht dem entspricht. Aber meine Erfahrung hat mich an der Stelle in die irre geführt. Die Suche über das Internet ergab ähnliche Ergebnisse, aber keines wies darauf, welche Abhängigkeiten im Umfeld notwendig sein sollten, damit das Einbinden von Resourcen aus einer anderen Assembly funktioniert.
Links
Kommentare