8 Stimmen

Bedingte Kompilierung des Präprozessors in XAML

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

13voto

Pieter van Ginkel Punkte 28696

Sie können einen Code in den Konstruktor einfügen, der die Elemente aktiviert/deaktiviert:

public MainWindow()
{
    InitializeComponent();

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

3voto

Jeff Yates Punkte 59874

Für XAML gibt es keine präprozessorähnlichen Direktiven. Sie können jedoch XAML-Dateien auf der Grundlage der Build-Konfiguration ein- und ausschließen, wodurch Sie eine gewisse Kontrolle haben. Auf diese Weise könnten Sie je nach der gewählten Build-Konfiguration verschiedene Varianten einer Datei einschließen. Der Nachteil ist natürlich, dass Sie mehrere Versionen einer Datei verwalten müssten. Dies könnte durch die Verwendung von T4-Vorlagen so dass die verschiedenen Dateien entsprechend der gewählten Konfiguration automatisch erzeugt werden.

0voto

basarat Punkte 230827

Es gibt zwei Möglichkeiten, dies zu tun. Die eine ist die Verwendung der Präprozessor-Direktiven, die ganze Codeabschnitte maskieren können, die nur in einem bestimmten Build ausgeführt werden. Oder Sie können das bedingte Attribut verwenden, um auf einfache Weise eine vollständige Methode 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 in Ihrem Code auf die Steuerelemente verweisen, indem Sie ein x:Name-Attribut in xaml bereitstellen und den Code zum Deaktivieren der Steuerelemente in den bedingten Abschnitt Ihres Codes einfügen.

Aktualisiert: um das Attribut x:Name deutlicher zu machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X