Respuestas:
De hecho hay :
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
}
}
}
Enable project code
debe estar habilitado (o Menú-> Diseño-> 🗹 Ejecutar código de proyecto).
En algunos casos, necesito saber si el diseñador inicia una llamada a mi clase que no es de IU (como si creo una clase DataContext desde XAML). Entonces, el enfoque de este artículo de MSDN es útil:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Para cualquier control de WPF alojado en WinForms , DesignerProperties.GetIsInDesignMode(this)
no funciona.
Entonces, creé un error en Microsoft Connect y agregué una solución alternativa:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
lugar de GetExecutingAssembly()
? Este último debería devolver el ensamblado donde se define esta propiedad
Respuesta tardía, lo sé, pero para cualquier otra persona que quiera usar esto en DataTrigger
, o en cualquier lugar de XAML en general:
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>
Usa este:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Las operaciones asincrónicas y de archivo no funcionarán aquí)
Además, para crear una instancia de un objeto en tiempo de diseño en XAML (d es el espacio de nombres del diseñador especial)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) es para aplicaciones de la Tienda, incluidas en la API de Windows Runtime. Esta no es una solución WPF lista para usar si solo está trabajando en una aplicación de escritorio de Windows normal.