Antworten:
In der Tat gibt es :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Beispiel:
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 codemuss der Schalter aktiviert sein (oder Menü-> Design-> 🗹 Projektcode ausführen).
In einigen Fällen muss ich wissen, ob ein Aufruf meiner Nicht-UI-Klasse vom Designer initiiert wird (z. B. wenn ich eine DataContext-Klasse aus XAML erstelle). Dann ist der Ansatz aus diesem MSDN-Artikel hilfreich:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Für alle WPF - Steuerelemente in WinForms gehostet , DesignerProperties.GetIsInDesignMode(this)funktioniert nicht.
Also habe ich einen Fehler in Microsoft Connect erstellt und eine Problemumgehung hinzugefügt:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()statt sein GetExecutingAssembly()? Letzterer sollte die Assembly zurückgeben, in der diese Eigenschaft definiert ist
Späte Antwort, ich weiß - aber für alle anderen, die dies in einer DataTriggeroder irgendwo in XAML im Allgemeinen verwenden möchten:
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>
Verwende das hier:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Async- und Dateioperationen funktionieren hier nicht)
Zum Instanziieren eines Entwurfszeitobjekts in XAML (d ist der spezielle Designer-Namespace)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel) ist für Store-Apps vorgesehen, die in der Windows Runtime-API enthalten sind. Dies ist keine sofort einsatzbereite WPF-Lösung, wenn Sie nur an einer normalen Windows-Desktopanwendung arbeiten.