W Winforms możesz powiedzieć
if ( DesignMode )
{
// Do something that only happens on Design mode
}
czy jest coś takiego w WPF?
Odpowiedzi:
Rzeczywiście jest :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Przykład:
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
musi być włączony (lub Menu-> Projekt-> 🗹 Uruchom kod projektu).
W niektórych przypadkach muszę wiedzieć, czy wywołanie mojej klasy innej niż UI jest inicjowane przez projektanta (na przykład w przypadku tworzenia klasy DataContext z XAML). Wtedy pomocne jest podejście z tego artykułu MSDN :
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Dla żadnych kontrolek WPF hostowanych w WinForms , DesignerProperties.GetIsInDesignMode(this)
nie działa.
Więc utworzyłem błąd w Microsoft Connect i dodałem obejście:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
zamiast tego GetExecutingAssembly()
? Ten ostatni powinien zwrócić zestaw, w którym ta właściwość jest zdefiniowana
Wiem, że późna odpowiedź, ale dla każdego, kto chce użyć tego w a DataTrigger
lub gdziekolwiek w XAML w ogóle:
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>
Użyj tego:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Operacje asynchroniczne i na plikach nie będą tutaj działać)
Ponadto, aby utworzyć wystąpienie obiektu czasu projektowania w XAML (d to specjalna przestrzeń nazw projektanta)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) jest przeznaczona dla aplikacji ze sklepu, zawartych w interfejsie Windows Runtime API. To nie jest gotowe rozwiązanie WPF, jeśli pracujesz tylko na zwykłej aplikacji klasycznej systemu Windows.