107 votes

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

Dans Winforms, vous pouvez dire

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

Existe-t-il quelque chose comme cela dans WPF ?

164voto

Enrico Campidoglio Points 17157

En effet, il existe :

System.ComponentModel.DesignerProperties.GetIsInDesignMode

Ejemplo:

using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

public class MyUserControl : UserControl
{
    public MyUserControl()
    {
        if (DesignerProperties.GetIsInDesignMode(this))
        {
            // Design-mode specific functionality
        }
    }
}

48voto

Max Galkin Points 10116

Dans certains cas, j'ai besoin de savoir si un appel à ma classe non-UI est initié par le concepteur (comme si je créais une classe DataContext à partir de XAML). Dans ce cas, l'approche d'après cet article de MSDN est utile :

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

23voto

serhio Points 9649

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

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

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

10voto

Je sais que la réponse est tardive, mais pour tous ceux qui veulent l'utiliser dans une DataTrigger ou n'importe où dans XAML en général :

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

<Style.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
                 Path=(componentModel:DesignerProperties.IsInDesignMode)}" 
                 Value="True">
        <Setter Property="Visibility" Value="Visible"/>
    </DataTrigger>
</Style.Triggers>

-1voto

Jeson Martajaya Points 434

Utilisez celui-ci :

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

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

De même, pour instancier un objet de conception dans XAML (d est l'espace de noms spécial du concepteur)

<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X