Ich habe aC# wpf-basierte Klassenbibliothek mit Modellen, Ansichtsmodellen und Ansichten, die ich in mehreren Add-Ins für DEktop-Anwendungen mit APIs verwende unterstützt gehostete andockbare WPF-Benutzersteuerelemente. Von hier aus kann ich verschiedene Steuerelemente verwenden und Dialoge starten, um mit verschiedenen Datenstrukturen in der 3rd-Party-Anwendung zu interagieren. Meine Klassenbibliothek verfügt über keine App.xaml-Datei.Geben Sie Klassenbibliotheksartressourcenwerte aus referenzierenden Add-Ins an, oder ändern Sie sie
Ich habe eine ResourceDictionary XAML-Datei erstellt, die ich als Haupt-Stylesheet in meinen Ansichten verwende. In meinen Benutzersteuerungen und Fenstern, ich darauf verweisen:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Resources/styleMain.xaml"/>
</ResourceDictionary.MergedDictionaries
Innerhalb dieses Stylesheet, schaff' ich meine verschiedenen Kontrollen meine Ansichten zu vereinfachen und zu vereinheitlichen. Auf der untersten Ebene habe ich Einstellungen für Dinge wie Schriftgröße, Schriftfamilie und Farbe. Zum Beispiel habe ich mehrere Pinsel, die ich in meinen Kontrollen verwende. Einer sieht so aus:
<Color x:Key="ColorBase_Primary" R="255" G="0" B="115" A="255"/>
<SolidColorBrush x:Key="Color_Primary" Color="{StaticResource ColorBase_Primary}"/>
Das alles funktioniert gut für Design und Tests. Ich verweise jedoch auf diese Klassenbibliothek in mehreren anderen Projekten. In diesen anderen Projekten bin Hosting, ich die Hauptbenutzersteuerung von meiner Klassenbibliothek:
<UserControl x:Class="MyAppHost.ucDockingHost"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyAppHost"
xmlns:viewModels="clr-namespace:MyClassLibrary.ViewModels;assembly=MyClassLibrary"
xmlns:views="clr-namespace:MyClassLibrary.Views;assembly=MyClassLibrary"
mc:Ignorable="d">
<UserControl.DataContext>
<viewModels:vmMain/>
</UserControl.DataContext>
<Grid>
<views:ucMainGrid ViewModelMain="{Binding}" Property1="SomeValue" Property2="SomeOtherValue"/>
</Grid>
</UserControl>
Hier bin ich Einstellung DependencyProperties aus dem Add-In-Anwendung, die meine Klassenbibliothek ohne Probleme verweist, und alle meine Bindungen und Kontrollverhalten funktioniert gut.
Was ich jetzt hoffe, ist in der Lage, aus meinem Add-in (und nicht die Hauptklassenbibliothek) die grundlegenden Ressourcenwerte, die in meinem Stylesheet verwendet werden, insbesondere Farbe (wie in der Lage sein zu ändern) der mit x:Key="ColorBase_Primary"
verbundene Wert). Auf diese Weise kann ich verschiedene Implementierungen an das Branding verschiedener Kunden etc. anpassen. Ich habe lange nach Beispielen oder Erkenntnissen gesucht und komme immer wieder zu kurz.
Es wäre einfach genug, einfach die gesamte Klassenbibliothek unabhängig mit jeder Anwendung zu implementieren und das Stylesheet direkt anzupassen, aber das scheint überhaupt nicht richtig zu sein. Gibt es eine Möglichkeit für mich, ein ResourceDictionary in meinen Add-In-Anwendungen zu erstellen, das die in meiner Klassenbibliothek angegebenen Ressourcenwerte liefern, ändern oder überschreiben kann? Oder sollte ich dies über eine DependencyProperty in meinem View-Modell tun? Das scheint auch nicht richtig zu sein.
Ich glaube nicht, dass ich Ihre Frage verstehe. Möchten Sie einige Ressourcen überschreiben, die in der referenzierten Klassenbibliothek in einer bestimmten Anwendung definiert sind, oder was ist Ihr Problem? – mm8
Sie verstehen meine Frage. Ich möchte auf meine Klassenbibliothek andere Anwendungen verweisen und in diesen Anwendungen einige Ressourcen überschreiben können. – davestasiuk