Dans Winforms, vous pouvez dire
if ( DesignMode )
{
// Do something that only happens on Design mode
}
Existe-t-il quelque chose comme cela 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 ?
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
}
}
}
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
}
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;
}
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>
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 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.