2010-04-29 3 views
6

Je viens de changer mon application WPF de .Net3.5 à .Net4. Ce faisant, tous mes styles globaux ont cessé de fonctionner. Seuls les styles explicitement définis à l'aide d'une clé ont fonctionné. J'ai fait quelques recherches et compris ce qui cause cela, et l'ai reproduit dans une application simple.Problème de styles globaux WPF avec .Net4

J'ai une application WPF simple contenant seulement un bouton avec du texte - pas de style ou autre chose. Je définis un style pour tous les boutons du ResourceDictionary de app.xaml:

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

Mon bouton est maintenant rouge - tout va bien. Je déplace maintenant ceci à un ResourceDictionary séparé dans un projet séparé. C'est là que je veux tenir tous mes styles partagés. Le bouton est toujours rouge, et ma référence de App.xaml à SharedStyles.xaml ressemble à ceci:

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

Maintenant - je veux SharedStyles.xaml de StyleLib de tenir toutes les définitions de style spécifiques, donc je créer un nouveau fichier dans le même projet appelé ButtonStyles.xaml, et j'y ajoute la ressource. En fait - j'ajoute un autre style aussi avec une clé à utiliser explicitement (techniquement j'ai ajouté ceci plus tard, donc cela n'a rien à voir avec le problème qui se produit).

<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 est référencé à partir SharedStyles.xaml:

<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> 

maintenant - mon contrôle de bouton est plus portant le titre. En fait - il est toujours montré comme stylé dans la fenêtre de prévisualisation dans VS2010, mais quand je cours l'application ils ne sont pas dénommés. Si je référence explicitement le style avec la clé "Explicite", ils obtiennent ce style - ainsi le fichier est inclus avec succès.

Une autre chose amusante est que si j'ajoute maintenant un autre style dans SharedStyle.xaml - par exemple. un style global pour StackPanel (ce que j'ai essayé) - alors le style global à l'intérieur de ButtonStyle.xaml commence magiquement à fonctionner!

Ma question est maintenant si je fais quelque chose de mal, ou si cela ressemble à un bug dans .Net4? Cela ressemble à un bug pour moi .. Cela a très bien fonctionné dans .Net3.5!

Répondre

3

Je trouve cela très étrange. Cela a très bien fonctionné dans .Net3.5, et je ne vois pas pourquoi cela ne devrait pas fonctionner maintenant! J'ai signalé cela comme un bug à Microsoft. Je l'ai signalé à Microsoft. Vous pouvez view the bug report here. Quand ils confirment le fichier le code source de la solution avec le problème isolé devrait également être disponible là.

+0

Microsoft l'a accepté comme un bug, alors devinez qu'il n'y a plus rien à faire à ce sujet .. – stiank81