2010-04-29 13 views
6

Ich habe gerade meine WPF-Anwendung von. Net3.5 zu. Net4 geändert. Dadurch haben alle meine globalen Stile nicht mehr funktioniert. Nur die Stile, die explizit mit einem Schlüssel gesetzt wurden, haben funktioniert. Ich habe etwas recherchiert und herausgefunden, was das verursacht, und es in einer einfachen App reproduziert.WPF globale Stile Problem mit. Net4

Ich habe eine einfache WPF-App, die nur eine Schaltfläche mit Text enthält - kein Stil oder irgendetwas anderes. Ich definiere einen Stil für alle Tasten in der Resource von App.xaml:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="Red"></Setter> 
</Style> 

Meine Taste ist jetzt Rot - alles in Ordnung. Ich verschiebe das nun in ein separates ResourceDictionary in einem separaten Projekt. Hier möchte ich alle meine geteilten Stile halten. Der Button ist immer noch rot, und meine Referenz von App.xaml zu SharedStyles.xaml sieht wie folgt aus:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries>    
      <ResourceDictionary Source="/StyleLib;component/SharedStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

jetzt - ich SharedStyles.xaml von StyleLib wollen alle spezifischen Stildefinitionen zu halten, so dass ich eine neue Datei erstellen im selben Projekt namens ButtonStyles.xaml, und ich füge die Ressource dort hinzu. Eigentlich - ich füge auch einen anderen Stil mit einem explizit zu verwendenden Schlüssel hinzu (technisch habe ich das später hinzugefügt, also hat das nichts mit dem auftretenden Problem zu tun).

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Style TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="Red"></Setter> 
    </Style> 

    <Style x:Key="Explicit" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="Blue"></Setter> 
    </Style>  
</ResourceDictionary> 

ButtonStyles.xaml aus SharedStyles.xaml verwiesen:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/StyleLib;component/ButtonStyles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

jetzt - meine Tasten-Steuerung ist nicht mehr gestylt. Eigentlich - es wird immer noch als Vorschau im VS2010 angezeigt, aber wenn ich die Anwendung starte, werden sie nicht gestylt. Wenn ich den Stil explizit mit dem Schlüssel "Explicit" referenziere, erhalten sie diesen Stil - also wird die Datei erfolgreich eingefügt.

Eine andere lustige Sache ist, dass, wenn ich jetzt einen anderen Stil in SharedStyle.xaml hinzufügen - z. ein globaler Stil für StackPanel (was ich ausprobiert habe) - dann fängt der globale Stil in ButtonStyle.xaml magisch an zu arbeiten ..!

Meine Frage ist jetzt, wenn ich etwas falsch mache, oder wenn das klingt wie ein Fehler in. Net4? Klingt wie ein Fehler für mich .. Das hat gut funktioniert in. Net3.5!

Antwort

3

Ich finde das sehr merkwürdig. Das hat in .Net3.5 gut funktioniert, und ich sehe keinen Grund, warum es jetzt nicht funktionieren sollte!

Ich habe dies als einen Fehler an Microsoft gemeldet. Sie können view the bug report here. Wenn sie die Datei bestätigen, sollte dort auch der Quellcode für die Lösung mit dem isolierten Problem verfügbar sein.

+0

Microsoft akzeptiert es als ein Fehler, also raten Sie, es gibt nichts mehr zu tun .. – stiank81