Unterscheidung ob Anwendung im Browser oder Designer läuft & Setzen einer Service-Referenz auf einen relativen Pfad

Es kann vorkommen, dass sich Programmierung nicht mit Expression Blend versteht. Eine Liste aller Voraussetzungen, die eine Programmierung erfüllen muss, um dass alles in Blend einwandfrei dargestellt wird, gibt es leider nicht, auch explizites Nachfragen bei MS führte zu keinem Ergebnis 
Auf jeden Fall lässt sich ein Workaround schaffen, in dem eine Weiche die Programmatik deaktiviert, die während des Entwickeln/Designens in Blend zu Fehlern führt. Beispielsweise bei der Konfiguration einer Service Referenz. (Denn die setzt sich ja unschön bei lokaler Entwicklung mit localhost in die Service.Config, kann aber mit folgendem Beispiel auf einen relativen Pfad gebracht werden)
In einer Helper-Klasse habe ich dazu eine einfache statische Methode, die ausliest, ob sich die Anwendung im Design-Modus befindet (das funktioniert auf diese Art in Blend und im Designer von Visual Studio!):
public static bool IsDesignTime(){
return DesignerProperties.GetIsInDesignMode(Application.Current.RootVisual);
}
Die Service-Referenz konfiguriere ich dann im Konstruktor des Controls um, aber nur für den "Ernstfall", also nicht in Blend.
if (Helper.IsDesignTime() == true){
proxy = new InteractionClient();
(...)
} else {
proxy = new InteractionClient("CustomBinding_Interaction", new Uri(Application.Current.Host.Source, "../Interaction.svc").AbsoluteUri);
}
Und voilà: Blend ist wieder dabei!
- Anmelden oder Registrieren um Kommentare zu schreiben
-
