Reputation: 12540
In Winforms you can say
if ( DesignMode )
{
// Do something that only happens on Design mode
}
is there something like this in WPF?
Upvotes: 108
Views: 54126
Reputation: 81
At design time, Application.Current
is Microsoft.VisualStudio.XSurface.Wpf.WpfSurfaceApp
, and at run time, Application.Current
is your App.cs
, so we can easily write the following code.
public static bool IsInDesignMode => Application.Current is not App;
Upvotes: 0
Reputation: 13394
Late answer, I know - but for anyone else who wants to use this in a DataTrigger
, or anywhere in XAML in 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>
Upvotes: 11
Reputation: 7352
Use this one:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Async and File operations wont work here)
Also, to instantiate a design-time object in XAML (d is the special designer namespace)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Upvotes: -1
Reputation: 59963
Indeed there is:
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Example:
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
public class MyUserControl : UserControl
{
public MyUserControl()
{
if (DesignerProperties.GetIsInDesignMode(this))
{
// Design-mode specific functionality
}
}
}
Upvotes: 163
Reputation: 28586
For any WPF Controls hosted in WinForms, DesignerProperties.GetIsInDesignMode(this)
does not work.
So, I created a bug in Microsoft Connect and added a workaround:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
Upvotes: 23
Reputation: 17000
In some cases I need to know, whether a call to my non-UI class is initiated by the designer (like if I create a DataContext class from XAML). Then the approach from this MSDN article is helpful:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Upvotes: 48