Respostas:
Na verdade, existe :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Exemplo:
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
deve estar habilitada (ou Menu-> Design-> 🗹 Executar Código do Projeto).
Em alguns casos, preciso saber se uma chamada para minha classe não IU é iniciada pelo designer (como se eu criasse uma classe DataContext a partir de XAML). Então, a abordagem deste artigo do MSDN é útil:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Para quaisquer controles WPF hospedados em WinForms ,DesignerProperties.GetIsInDesignMode(this)
não funciona.
Portanto, criei um bug no Microsoft Connect e adicionei uma solução alternativa:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
vez de GetExecutingAssembly()
? Este último deve retornar a montagem onde esta propriedade está definida
Resposta tardia, eu sei - mas para qualquer pessoa que queira usar isso em um DataTrigger
ou em qualquer lugar do XAML em geral:
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>
Use este:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(As operações Async e File não funcionam aqui)
Além disso, para instanciar um objeto de tempo de design em XAML (d é o namespace de designer especial)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) é para aplicativos da Store, incluídos na API do Windows Runtime. Esta não é uma solução WPF out-of-the-box se você estiver apenas trabalhando em um aplicativo de desktop normal do Windows.