Existe-t-il une propriété DesignMode dans WPF?

Dans Winforms, vous pouvez dire

if ( DesignMode ) { // Do something that only happens on Design mode } 

Y a-t-il quelque chose comme ça dans WPF?

En effet il y a :

System.ComponentModel.DesignerProperties.GetIsInDesignMode

Exemple:

 using System.ComponentModel; using System.Windows; using System.Windows.Controls; public class MyUserControl : UserControl { public MyUserControl() { if (DesignerProperties.GetIsInDesignMode(this)) { // Design-mode specific functionality } } } 

Dans certains cas, je dois savoir si un appel à ma classe non-interface utilisateur est initié par le concepteur (comme si je créais une classe DataContext à partir de XAML). Ensuite, l’approche de cet article MSDN est utile:

 // Check for design mode. if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) { //in Design mode } 

Pour tous les contrôles WPF hébergés dans WinForms , DesignerProperties.GetIsInDesignMode(this) ne fonctionne pas.

J’ai donc créé un bogue dans Microsoft Connect et ajouté une solution de contournement:

 public static bool IsInDesignMode() { if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) ) { return true; } return false; } 

Réponse tardive, je sais – mais pour quiconque veut l’utiliser dans un DataTrigger , ou n’importe où dans XAML en général:

 xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"      

Utilisez celui-ci:

 if (Windows.ApplicationModel.DesignMode.DesignModeEnabled) { //design only code here } 

(Les opérations Async et File ne fonctionneront pas ici)

En outre, pour instancier un object au moment du design dans XAML (d est l’espace de noms du concepteur spécial)

  ...