2010-11-28 5 views
9

Ich habe einige Code in C# WPF geschrieben, und ich habe einige Code zum Debuggen, die ich derzeit für Debug oder Release-Modus kompilieren oder deaktivieren. Wie kann ich UI-Steuerelemente, die derzeit in meinem XAML basierend auf C# -Präprozessordefinitionen geschrieben werden, aktivieren oder deaktivieren?Präprozessor bedingte Kompilierung in XAML

+0

In C# gibt es keinen Präprozessor, aber es gibt Präprozessordirektiven, die so verarbeitet werden, als gäbe es einen. http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=VS.100).aspx –

+0

mögliche Duplikate von [XAML Conditional Compilation] (http://stackoverflow.com/questions/1213576/xaml- conditional-compilation) –

Antwort

12

Sie können einen Code im Konstruktor hinzufügen, die aktiviert/deaktiviert die Elemente:

public MainWindow() 
{ 
    InitializeComponent(); 

#if DEBUG 
    button1.IsEnabled = false; 
#endif 
} 
+0

Ich habe wirklich darüber nachgedacht, wie sie überhaupt nicht existieren können, aber ich denke, das wird reichen. – Puppy

+0

Es ist nicht möglich, XAML basierend auf Präprozessorsymbolen zu analysieren. Ich glaube, das ist es wonach Sie suchen? –

+1

Sie können dies nicht auf Präprozessorsymbolen tun, aber Xaml unterstützt die bedingte Kompilierung von Abschnitten unter Verwendung der Markup-Kompatibilitätsfunktionen. ptahmoses Antwort verweist auf eine Frage, die auf einen Artikel über diese verweist. Es ist so nah wie du kommst. –

0

Es gibt zwei Möglichkeiten, dies zu tun. Man verwendet die Präprozessordirektiven, die ganze Codeabschnitte maskieren können, die nur in einem bestimmten Build ausgeführt werden. Oder Sie können das bedingte Attribut verwenden, um eine vollständige Methode einfach auszublenden. http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=420
Hier ist eine Beschreibung des Unterschieds zwischen den beiden: http://www.thinkfarahead.com/2007/09/if-debug-vs-conditional.html. Sie können auf die Steuerelemente in Ihrem Code verweisen, indem Sie ein x: Name-Attribut in xaml angeben und den Code setzen, um die Steuerelemente im bedingten Abschnitt Ihres Codes zu deaktivieren.

Aktualisiert: um klarer zu sein, erwähnt x: Name Attribut.

+2

Diese Links betreffen die bedingte C# -Kompilierung. Sie sind nicht auf Xaml anwendbar. Die Frage war über Xaml. –

+1

Nicht sorgfältig gelesen: "Steuerelemente in XAML definiert" ... "basierend auf C# Pre-Prozessor-Definitionen" Die Steuerelemente sind in XAML. Er möchte in C# deaktivieren – basarat

3

Es gibt keine Präprozessor-Anweisungen für XAML. Sie können jedoch XAML-Dateien basierend auf der Build-Konfiguration ein- und ausschließen, wodurch Sie eine gewisse Kontrolle erhalten. Dies könnte Ihnen eine Möglichkeit bieten, Variationen einer Datei abhängig von der gewählten Build-Konfiguration einzuschließen. Der Nachteil ist natürlich, dass Sie mehrere Versionen einer Datei verwalten müssen. Dies könnte durch die Verwendung von T4 templates gemildert werden, so dass die verschiedenen Dateien automatisch entsprechend der ausgewählten Konfiguration generiert werden.