C# WPF externes Resource Dictionary?



  • Hallo,

    ich schaue mir mal wieder WPF an, welche Möglichkeiten es beim Style gibt, etc. Ich habe gesehen, dass ich die Styles für eigene Controls auch mit Hilfe einer XAML Datei (Resource Dictionary) auslagern kann.

    Was ich bisher nicht geschafft habe, ist, dass diese XAML Datei zur Laufzeit aus einem externen Ordner geladen wird. Das Ziel soll sein, dass beispielsweise Kunden, sich die Styles eigenständig anpassen können - Barrierefreiheit wäre ein Stichwort hierzu.

    Ich habe im Netz gefunden, dass ich die XAML Datei in eine DLL auslagern kann. Das hilft mir aber nicht, da kein Kunde Visual Studio hat, um sich das Projekt neu zu kompilieren.

    Frage ist daher: Habe ich das falsch verstanden mit dem Auslagern? Geht das nur mit Hilfe der DLL oder kann ich die XAML Dateien auch lokal neben die *.exe legen, so dass sie beim Programmstart automatisch eingelesen werden?

    Vielen Dank im Voraus

    VG Torsten



  • Hallo nochmal,

    wenn ich den Pfad in der App.xaml zum Resource Dictionary komplett angebe, funktioniert es. Wie kann ich die Pfade relativ nutzen?

    <Application x:Class="Tests.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:Tests"
                 StartupUri="MainWindow.xaml">
    	<Application.Resources>
    		<ResourceDictionary>
    			<ResourceDictionary.MergedDictionaries>
    				<ResourceDictionary Source="pack://application:,,,/Styles/Colors.xaml" />
    				<!--<ResourceDictionary Source="/Styles/Colors.xaml" />-->
    				<!--<ResourceDictionary Source="E:/WpfControls/Tests/bin/Debug/net8.0-windows/Styles/Colors.xaml" />-->
    			</ResourceDictionary.MergedDictionaries>
    		</ResourceDictionary>
    	</Application.Resources>
    </Application>
    

    In diesem Beispiel funktioniert nur die (im Moment auskommentierte) letzte Zeile 😞

    VG Torsten



  • Da die per ResourceDictionary Source="..." eingeladene Datei zur Kompilierzeit verarbeitet wird, mußt du dies mittels C#-Code (XamlReader.Load und Resources.MergedDictionaries.Add(...)) durchführen, s.a. How to load a DictionaryStyle.xaml file at run time?



  • Hallo,

    okay, schaue ich mir an. Vielen Dank.

    VG Torsten


Anmelden zum Antworten