usingSystem.ComponentModel;usingSystem.Windows;usingSystem.Windows.Controls;publicclassMyUserControl:UserControl{publicMyUserControl(){if(DesignerProperties.GetIsInDesignMode(this)){// Design-mode specific functionality}}}
Zastosowałem Twoje rozwiązanie w mojej aplikacji, ale nie działa. Zapytałem o to tutaj stackoverflow.com/questions/3987439/… . Jeśli tak, dołącz do nas i dyskutuj.
W VS2019 przełącznik Enable project codemusi być włączony (lub Menu-> Projekt-> 🗹 Uruchom kod projektu).
marbel82
47
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}
Zastosowałem Twoje rozwiązanie w mojej aplikacji, ale nie działa. Zapytałem o to tutaj stackoverflow.com/questions/3987439/… . Jeśli tak, dołącz do nas i dyskutuj.
Nam G VU
20
Dla żadnych kontrolek WPF hostowanych w WinForms , DesignerProperties.GetIsInDesignMode(this)nie działa.
Czy nie powinno być GetEntryAssembly()zamiast tego GetExecutingAssembly()? Ten ostatni powinien zwrócić zestaw, w którym ta właściwość jest zdefiniowana
fjch1997
7
Wiem, że późna odpowiedź, ale dla każdego, kto chce użyć tego w a DataTriggerlub gdziekolwiek w XAML w ogóle:
Ta klasa ( 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.
Odpowiedzi:
Rzeczywiście jest :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Przykład:
źródło
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 :
źródło
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:
źródło
GetEntryAssembly()
zamiast tegoGetExecutingAssembly()
? Ten ostatni powinien zwrócić zestaw, w którym ta właściwość jest zdefiniowanaWiem, że późna odpowiedź, ale dla każdego, kto chce użyć tego w a
DataTrigger
lub gdziekolwiek w XAML w ogóle:źródło
Użyj tego:
(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)
źródło
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.