2010-09-03 5 views
1

J'essaie de définir l'application ResourceDictionary actuelle de WPF par programmation. (J'ai un projet WindForms, donc pas de "App.xaml" pour faire ça pour moi).Comportement étrange de Visual Studio lors de la définition du dictionnaire de ressources d'application

Note: Si quelqu'un sait comment lier l'équivalent d'un Application.Resources à un ElementHost et tous ses contrôles enfants hiérarchie, tel est l'objectif ultime ici.

j'ai ajouté à mon code:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Middlewerks;component/Resources.xaml", UriKind.RelativeOrAbsolute) }); 

Maintenant, il fonctionne parfaitement dans l'application, le style est très bien (i.e. .: Les arrière-plans de Grids sont rouges Il est juste un style de test.).

Mais si j'ouvre ce formulaire dans le concepteur, Visual Studio devient fou. Toute la fenêtre utilise mon style!

Voici une capture d'écran: http://localhostr.com/files/8368cc/Failure.jpg La partie cool est que j'ai trouvé comment éditer le skin bleu laid de Visual Studio 2010. La partie triste est que cela ne rendra pas mes clients heureux quand ils développent avec mon contrôle. N'hésitez pas à l'essayer et dites-moi comment je devrais mettre en œuvre mes ressources sans tout visser.

Code XAML: (montré en capture d'écran)

EDIT: Voici ma solution temporaire, très hackish pour que je puisse continuer à développer. C'est vraiment une douleur que "Application.Current" fonctionne sur Visual Studio.

if (Application.Current.MainWindow == null || !Application.Current.MainWindow.Title.EndsWith(" - Microsoft Visual C# 2010 Express")) 
{ 
    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Middlewerks;component/Resources.xaml", UriKind.RelativeOrAbsolute) }); 
} 
+0

En bref, Application.Current affecte Visual Studio, ce qui est extrêmement ennuyeux. Essayez d'avoir un contrôle de formulaire en faisant "Application.Current.Shutdown()" dans son constructeur. Si ce formulaire est ouvert, votre solution sortira toujours en charge. Assez stupide. – Lazlo

Répondre

0

Lorsque je travaillais sur un projet WinForms qui a utilisé les zones WPF, je viens d'utiliser MergedDictionaries pour apporter les ressources dont je avais besoin, chaque fois que je les avais besoin.

<Window.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="DefaultResourceDictionary.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

Pouvez-vous vous en sortir? Vous pouvez toujours mettre un code sur le dictionnaire si vous avez besoin de faire plus de programmation.

Vous pouvez l'utiliser à n'importe quel niveau sur n'importe quel élément. Autrement dit, il ne doit pas être un Window comme indiqué ici.

+0

Bon, maintenant il n'est pas complètement remplacé. Seulement, tous les boutons VS sont rouges. Très drôle, je viens de découvrir comment éditer le thème VS. :) Je ne savais pas qu'il a été écrit en WPF. – Lazlo

+0

Je ne peux pas vraiment m'en tirer avec ça. Je crée des contrôles WPF par défaut par programme (c'est-à-dire des boutons, des expandeurs, des étiquettes) et j'ai besoin qu'ils soient stylisés dans tout l'ElementHost. En fait, ce que je dois vraiment faire est de * lier un dictionnaire de ressources à un élément host *. Si je définis la propriété ElementHost.Child.Resources, elle ne s'applique qu'à la racine, j'en ai besoin pour affecter également tous les contrôles enfants. – Lazlo

Questions connexes