2010-04-12 8 views
7

Ich versuche, WPF Ressourcenwörterbücher auf den Code hinter zu verschmelzen, aber für einige Reasion funktioniert das nicht. Wenn ich versuche, die Wörterbücher auf dem Dokument zusammenführen selbst es zum Beispiel läuft:Zusammenführen von Ressourcen Wörterbücher

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:WpfApplication212;assembly=WpfApplication212"> 

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="Theme.xaml"></ResourceDictionary> 
</ResourceDictionary.MergedDictionaries> 

<Style TargetType="{x:Type local:URComboBox}" BasedOn="{StaticResource ComboBoxStyle}"> 
</Style> 

Dies funktioniert, aber wenn ich die ResourceDictionary.MergedDictionaries und in Code Kommentar versuchen, dieses:

ResourceDictionary skin = new ResourceDictionary(); 
skin.Source = styleLocation; 
ResourceDictionary skinFather = new ResourceDictionary(); 
skinFather.MergedDictionaries.Add(skin); 
skinFather.Source = styleLocationFather; 

Dies wird abgebrochen, weil die Ressource nicht gefunden werden kann.

+1

Was ist "styleLocation" und "styleLocationFather"? –

Antwort

6

Sie können die Source-Eigenschaft nicht zum Laden eines Ressourcenwörterbuchs aus Code verwenden.

Von MSDN:

„Zusammengeführtes Wörterbücher können auf eine Ressourcen-Wörterbuch durch Code hinzugefügt werden, um die standardmäßig zunächst leer Resource, die für jede Resources-Eigenschaft existiert auch eine Standard hat, zunächst leer MergedDictionaries Sammlung Eigenschaft.. Fügen Sie ein zusammengeführtes Wörterbuch über Code hinzu, erhalten Sie einen Verweis auf das gewünschte primäre ResourceDictionary, ermitteln Sie den zugehörigen MergedDictionaries-Eigenschaftswert, und rufen Sie Add in der generischen Collection auf, die in MergedDictionaries enthalten ist.Das Objekt, das Sie hinzufügen, muss ein neues ResourceDictionary sein Legen Sie nicht die Source-Eigenschaft fest, sondern müssen Sie ein ResourceDictionary-Objekt abrufen, indem Sie entweder eins erstellen oder eins laden Möglichkeit, ein vorhandenes ResourceDictionary zu laden, um XamlReader.Load für einen vorhandenen XAML-Dateistream aufzurufen, der ein ResourceDictionary-Stammverzeichnis hat, und dann den XamlReader.Load-Rückgabewert an ResourceDictionary zu übergeben. "

daher einige Pseudo-Code:

ResourceDictionary myResourceDictionary = XamlReader.Load(someXamlStreamReader); 
anotherResourceDictionary.MergedDictionaries.Add(myResourceDictionary); 

Here is another example, wie es zu tun:

Uri uri = new Uri("/PageResourceFile.xaml", UriKind.Relative); 
StreamResourceInfo info = Application.GetResourceStream(uri); 
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader(); 
Page page = (Page)reader.LoadAsync(info.Stream); 
Verwandte Themen