2010-11-05 3 views
1

Je recherche DesignMode booléen sur un UserControl WPF personnalisé ... Comment correctement puis-je l'implémenter?Propriété WPF UserControl DesignMode (hébergé sur un formulaire WinForm)

J'ai un contrôle WPF hébergé dans un WinForm. J'ai vu que la classe "DesignerProperties" ne fonctionne pas dans un tel cas.

J'ai une certaine logique dans le constructeur qui jette des exceptions en mode de conception et que vous voulez ignorer ce code, car je n'arrive pas à voir un formulaire avec mon UserControl dans le concepteur.

J'ai essayé

private static bool? _isInDesignMode; 

/// <summary> 
/// Gets a value indicating whether the control is in design mode 
/// (running in Blend or Visual Studio). 
/// </summary> 
public static bool IsInDesignModeStatic 
{ 
    get 
    { 
     if (!_isInDesignMode.HasValue) 
     { 
#if SILVERLIGHT 
    _isInDesignMode = DesignerProperties.IsInDesignTool; 
#else 
      var prop = DesignerProperties.IsInDesignModeProperty; 
      _isInDesignMode 
       = (bool)DependencyPropertyDescriptor 
       .FromProperty(prop, typeof(FrameworkElement)) 
       .Metadata.DefaultValue; 
#endif 
     } 

     return _isInDesignMode.Value; 
    } 
} 

mais cela ne fonctionne pas: ((je vois des exceptions concepteur à "bloqué" avec des lignes de code IsInDesignModeStatic ...

Répondre

1

Essayez cette

if (DesignerProperties.GetIsInDesignMode(this/*this user control*/)) 
    { 
     // Design-mode specific functionality 
    } 
+0

ne fonctionne pas, concepteur me donne un stacktrace avec une erreur à l'intérieur du if (!) .... DesignerProperties – serhio

+0

Je remarque que j'ai un WinForm et à l'intérieur d'un contrôle WPF, ce code ne ne fonctionne pas pour le contrôle WPF lorsque j'ouvre le Winform – serhio

2

I utilisé pour détecter DesignMode (mon contrôle WPF est défini dans une bibliothèque de classes)

' Exit here if in Design Mode 
    If Assembly.GetEntryAssembly() Is Nothing Then Exit Sub 

Vous pouvez vérifier Assembly.GetEntryAssembly.FullName.ToString s'il ne s'agit pas de rien et déterminer d'où le contrôle est en cours d'initialisation. La propriété DesignerProperties.IsInDesignModeProperty renvoyait null pour moi lorsque le contrôle était hébergé dans WinForms car WPF ne savait pas qu'il y avait un concepteur dans WinForms.

Steve

Questions connexes