2012-06-07 14 views
6

Ich habe ein WPF-Fenster, das zwei Vektorbilder aus XAML-Dateien laden soll. (Jede Datei befindet sich in einer separaten Datei für eine einfachere Änderung in Expression Design.)Holen Sie eine Ressource aus einem ResourceDictionary mit einem Schlüssel

Wenn ich die XAML-Dateien in eine MergedDictionary einfüge, funktioniert es gut. Hier ist der Code ich benutze:

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Images/LCCD logo.xaml" /> 
      <ResourceDictionary Source="Images/LCCD bottom image.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

und

<Image Source="{Binding Source={StaticResource LCCDlogo}}" /> <!-- Simplified --> 
<Image Source="{Binding Source={StaticResource LCCDbar}}" /> <!-- Simplified --> 

Allerdings habe ich jetzt brauchen mehr auf die Ressourcen des Fenster hinzuzufügen. Die neue Ressource gehört zu diesem Fenster, daher möchten wir, dass sie in derselben Datei statt in einer enthaltenen Datei enthalten ist.

Wenn ich den folgenden Code zwischen <Window.Resources> und <ResourceDictionary> hinzufügen, ich folgende Fehlermeldung erhalten:

-Code

<Style TargetType="{x:Type tab:FabTabItem}"> 
     <Setter Property="Header" Value="{Binding Path=LabelText}"/> 
     <Setter Property="HeaderTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Margin="0,0,4,0"> 
         <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/> 
        </StackPanel> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Warnung

The designer does not support loading dictionaries that mix 'ResourceDictionary' items without a key and other items in the same collection. Please ensure that the 'Resources' property does not contain 'ResourceDictionary' items without a key, or that the 'ResourceDictionary' item is the only element in the collection.

So wechsle ich die <ResourceDictionary> Etikett zu diesem:

<ResourceDictionary x:Key="Images"> 

Allerdings weiß ich nicht, wie auf die Ressourcen in diesem Wörterbuch jetzt zuzugreifen. Wie erhalten Sie die Ressourcen von innerhalb einer benannten ResourceDictionary?


EDIT

Es macht nichts. Dies kompiliert, läuft aber nicht.

Der Fehler ist:

''Resources' property has already been set on 'MainWindow'.

Ich denke, ich werde es eine andere Art und Weise zu tun haben.

Antwort

8

Gemäß der MSDN-Seite unter MergedResourceDictionary's ist es legal, aber nicht üblich, eine Ressource in einem Ressourcenwörterbuch zu definieren, das in einem MergedDictionary angegeben ist. Von der obigen Seite.

It is legal to define resources within a ResourceDictionary that is specified as a merged dictionary, either as an alternative to specifying Source, or in addition to whatever resources are included from the specified source. However, this is not a common scenario; the main scenario for merged dictionaries is to merge resources from external file locations. If you want to specify resources within the markup for a page, you should typically define these in the main ResourceDictionary and not in the merged dictionaries.

So geben Sie einen Versuch, um zu sehen, ob es funktioniert.

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Images/LCCD logo.xaml" /> 
      <ResourceDictionary Source="Images/LCCD bottom image.xaml" /> 
      <ResourceDictionary> 
       <Style TargetType="{x:Type tab:FabTabItem}"> 
        <Setter Property="Header" Value="{Binding Path=LabelText}"/> 
        <Setter Property="HeaderTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal" Margin="0,0,4,0"> 
            <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/> 
           </StackPanel> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 
+0

Das sieht aus wie es funktioniert, und es ist eine viel bessere Antwort als meine. –

+0

@Moshekatz Gut zu helfen –

1

Ich landete die <Style> weiter unten in die Datei, auf das übergeordnete Element der Elemente, die diesen Stil verwenden.

Es ist nicht die beste Lösung, aber es funktioniert.

Verwandte Themen