2010-08-18 6 views
0

J'ai un contrôle sans apparence que j'ai construit avec un style par défaut défini dans generic.xaml dans mon répertoire Themes. J'ai aussi ce qui suit dans le constructeur.WPF Le contrôle de Lookless n'apparaît pas dans VS designer

static MyControl() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl))); 
} 

public MyControl() 
{ 
    //DoSomeWork 
} 

Y a-t-il quelque chose d'autre que je suppose dans WPF Land? Dans Silverlight tout ce que j'ai à faire est:

DefaultStyleKey = typeof(MyControl); 

NOTE: Il rend cependant dans le mélange d'expression.

Répondre

1

Ce constructeur est-il statique? sinon, ça devrait l'être. L'appel OverrideMetadata doit vivre dans un constructeur statique pour fonctionner correctement. modifiez ou ajoutez votre constructeur comme ceci:

static MyControl() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl))); 
} 
+0

Cela ne fonctionne toujours pas dans VS. Fonctionne toujours dans Expression Blend. – cjibo

+0

Notez également que vous ne pouvez pas utiliser les modificateurs d'accès sur les constructeurs statiques. – cjibo

+0

Je devrais probablement noter que parfois le concepteur dans VS est stupide. le concepteur 2k10 est meilleur que le 2k8, tho. –

0

Est-ce que votre concepteur VS se bloque ou ne montre rien, mais une apparence de bordure plate.

Je suggérerais. Vous avez un style distinct pour le contrôle, relativement léger. Appliquez ce style au constructeur du contrôle en vérifiant si IsInDesignTime. Si votre concepteur se bloque ou affiche une erreur, il se peut que ce soit le cas. Ensuite, vous devriez essayer le débogage de l'heure de conception.

Aussi, dans quelques cas. Si, le type d'application est ".NETFramework 4 Client Profile" [Quel est le type d'application wpf par défaut dans VS2010], vous pourriez obtenir des choses câblées comme ceci.

HTH

0

Avez-vous ajouté cet attribut à votre assembly:

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries))] 

Cela est généralement mis dans le fichier AssemblyInfo.cs. Il indique à WPF où chercher votre fichier generic.xaml.

Questions connexes