2013-03-05 23 views
6

Ich habe vor kurzem auf VS 2012 aktualisiert, musste ich, als ich begann, die .net 4.5 verwenden, aber das ist neben dem Punkt. Mein Problem ist folgendes:Die Ressource "x" konnte nicht aufgelöst werden.

ich ein ResourceDictionary in meinem Hauptprojekt haben AppStyles.xaml genannt, und in der App.Xaml ich habe folgendes:

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

In meinem ResourceDictionary es einen Stil, und ich konnte dann gelten diesen Stil zu jedem Button in einem meiner Projekte durch Einstellung Style={StaticResource MyButton}.

Nach dem Upgrade auf VS 2012 bemerkte ich, dass ich den Fehler im Titel sehr oft bekomme, und manchmal hält es mich vom Debuggen und manchmal nicht!

Gibt es eine andere Möglichkeit, dass ich dies tun sollte, oder gibt es ein Problem in VS 2012?

+0

Haben Sie meinen Sie Probleme während der Entwurfszeit über etwas bekommen nicht gefunden werden? Aber du kannst es kompilieren und es läuft gut, oder? –

+0

Ich bekomme Fehler in der Entwurfszeit und sage, dass die Ressource nicht gefunden wird. Aber manchmal kann ich laufen, und es zeigt sogar die Knöpfe richtig an! Aber manchmal stoppt es das Debugging. –

+0

Haben Sie Code für AppStyles.xaml? (Ich tat, und das hielt VS davon ab, es in Entwurfszeit zu laden) Ein anderes Problem kann AppStyles.xaml als eine Ressource einschließen, die zur Kompilierungszeit, aber nicht in Entwurfszeit arbeitet. Es sollte eine "Seite" sein. – Wouter

Antwort

5

Ich habe auch dieses Problem zu Zeit in VS2010. Manchmal löst sich das Problem, wenn ich eine "Clean Solution" und eine "Rebuild Solution" mache. Wenn das nicht funktioniert, starte ich normalerweise VS2010 neu.

Ich habe auch den Style x: Key zu etwas anderem umbenannt und das Problem war weg. Aber ich nicht, diese Lösung finden, perfekt zu sein ...

<Application.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 

    <!-- Load Infrastructure's Resource Dictionaries --> 
    <ResourceDictionary Source="/MyProject.Modules.Infrastructure;component/ResourceDictionaries/ResourceLibrary.xaml" /> 

    </ResourceDictionary.MergedDictionaries> 

    <!-- Workaround for ResourceDictionary loading bug/optimization --> 
    <Style TargetType="{x:Type Rectangle}" /> 

</ResourceDictionary> 

Referenz auf diese Frage in Bezug auf die Umgehung in meinem Code Beispiel: Trouble referencing a Resource Dictionary that contains a Merged Dictionary

+0

Ich habe meinen Computer gereinigt, neu aufgebaut, neu gestartet und sogar neu gestartet! Dieser Fehler taucht auf und es macht keinen Sinn, er lief perfekt eine Sekunde und der nächste konnte nicht mehr kompiliert werden! –

+0

Hmm. Das ist so seltsam. Haben Sie versucht, Ihre Style-Tasten umzubenennen? – hijack

+0

Ja ich habe, das Problem bleibt bestehen! Es hindert mich nicht daran, mehr zu kompilieren, aber keines meiner benutzerdefinierten Steuerelemente, die diesen Stil verwenden, kann im Design gezeigt werden! –

4

Sie ein gemeinsames oder Infrastrukturprojekt erstellen, von denen andere Projekte werden verweisen. Fügen Sie Ihre Ressourcen hinzu. Dann erstellen Sie einen Pack-URI. Referenz dann in Ihrem Usercontrol oder Fenstern Ressourcen innerhalb einer Ressourcenverzeichnis

<...Resources> 
<ResourceDictionary> 
    <!-- Resource Dictionaries --> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary 
      Source="pack://application:,,,/Common;component/Dictionaries/Styles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

In der Usercontrol oder Verwendung Window.Resources im Fall eines Fensters. Das funktioniert für mich.

10

WPF kann das Ressourcenwörterbuch, das Sie zusammenführen möchten, nicht auflösen. Wenn Sie ein zusammengeführtes Wörterbuch erstellen, folgt WPF einem Satz von Regeln, um zu versuchen, den URI aufzulösen. In Ihrem Fall ist der URI nicht eindeutig, daher kann WPF ihn nicht zuverlässig beheben.

Ändern Sie die Source URI in der App.xaml zu einem absoluten Pack-URI. Zum Beispiel, wenn Sie Projekt ist MyProject (d.h .: „MyProject“ ist der kurze Montagename) genannt wird, dann sollten Sie die Source in App.xaml ändern:

Dies setzt voraus, AppStyles.xaml in der Wurzel MyProject ist. Sie können optional die Informationen zur Autorität, zur Assemblyversion und zum öffentlichen Schlüssel der signierten Assembly angeben. Sie sollten jedoch mit dem kurzen Assembly-Namen (MyProject, in dem obigen Beispiel) sicher sein.

Sehen Sie diese Seite auf MSDN für weitere Details on Pack URIs in WPF: http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

1

Sie die Ressource Wörterbuch zu Ihrem Projekt hinzufügen kann dann seine Build-Aktion ändern Ressourcen und dann versuchen, seine uri im Code hinzufügen, wie folgt:

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

oder einfach der vs2012 verarbeiten lassen, indem sie die Eigenschaften Reiter ...

+0

Das Umschalten der Wörterbuch-Build-Aktion auf * Ressource * ändert nichts – superjos

3

ist es möglich, den relativen Pfad zu Ihrem appStyles.xaml Ordner zu verwenden. hoffe das hilft.

so etwas wie unten

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Resources/Styles.xaml"></ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
<ResourceDictionary> 
Verwandte Themen