Risposte:
In effetti c'è :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Esempio:
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 essere abilitato (o Menu-> Design-> 🗹 Esegui codice progetto).
In alcuni casi ho bisogno di sapere se una chiamata alla mia classe non UI viene avviata dal designer (come se creo una classe DataContext da XAML). Quindi l'approccio di questo articolo di MSDN è utile:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Per qualsiasi controllo WPF ospitato in WinForms , DesignerProperties.GetIsInDesignMode(this)
non funziona.
Quindi, ho creato un bug in Microsoft Connect e ho aggiunto una soluzione alternativa:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
invece di GetExecutingAssembly()
? Quest'ultimo dovrebbe restituire l'assembly in cui questa proprietà è definita
Risposta tardiva, lo so, ma per chiunque voglia usarlo in un DataTrigger
, o ovunque in XAML in generale:
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 questo:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Le operazioni Async e File non funzioneranno qui)
Inoltre, per creare un'istanza di un oggetto in fase di progettazione in XAML (d è lo spazio dei nomi di progettazione speciale)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) è per le app dello Store, incluse nell'API di Windows Runtime. Questa non è una soluzione WPF pronta per l'uso se stai solo lavorando su una normale applicazione desktop di Windows.