2010-11-28 3 views
9

J'ai du code écrit en C# WPF, et j'ai du code pour le débogage, que je compile actuellement en mode debug ou release. Comment puis-je activer ou désactiver les contrôles de l'interface utilisateur qui sont actuellement écrits dans mon code XAML en fonction des définitions du préprocesseur C#?Compilation conditionnelle du préprocesseur en XAML

+0

Il n'y a pas de préprocesseur en C# mais des directives de préprocesseur sont traitées comme s'il y en avait une. http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=VS.100).aspx –

+0

duplication possible de [XAML Conditional Compilation] (http://stackoverflow.com/questions/1213576/xaml- compilation-conditionnel) –

Répondre

12

Vous pouvez ajouter du code dans le constructeur qui active/désactive les éléments:

public MainWindow() 
{ 
    InitializeComponent(); 

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

Je pensais vraiment à comment ils pourraient tout simplement ne pas exister en premier lieu, mais je suppose que cela fera l'affaire. – Puppy

+0

Il n'est pas possible d'analyser XAML en fonction des symboles du préprocesseur. Je crois que c'est ce que vous cherchez? –

+1

Vous ne pouvez pas le faire sur les symboles du préprocesseur, mais Xaml prend en charge la compilation conditionnelle des sections, en utilisant les fonctions de compatibilité des annotations. La réponse de ptahmose renvoie à une question qui renvoie à un article sur ceux-ci. C'est aussi proche que tu l'auras. –

0

Il y a deux façons de le faire. L'un d'eux utilise les directives du préprocesseur qui peuvent masquer des sections complètes de code ne l'exécutant que dans une construction particulière. Ou vous pouvez utiliser l'attribut conditionnel pour bloquer facilement une méthode complète. http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=420
Voici une description de la différence entre les deux: http://www.thinkfarahead.com/2007/09/if-debug-vs-conditional.html. Vous pouvez référencer les contrôles dans votre code en fournissant un attribut x: Name dans xaml et en mettant le code pour désactiver les contrôles dans la section conditionnelle de votre code.

Mis à jour: pour être plus clairement mentionné x: Attribut de nom.

+2

Ces liens concernent la compilation conditionnelle C#. Ils ne sont pas applicables à Xaml. La question portait sur Xaml. –

+1

Non lu attentivement: "Contrôles définis dans xaml" ... "basé sur les définitions du pré-processeur C#" Les contrôles sont en xaml. Il veut désactiver en C# – basarat

3

Il n'existe aucune directive de style de préprocesseur pour XAML. Toutefois, vous pouvez inclure et exclure des fichiers XAML en fonction de la configuration de la version, ce qui vous permet de disposer d'un certain contrôle. Cela pourrait vous fournir un moyen d'inclure des variantes d'un fichier en fonction de la configuration de construction choisie. Bien sûr, l'inconvénient est que vous devez maintenir plusieurs versions d'un fichier. Cela pourrait être atténué par l'utilisation de T4 templates afin que les différents fichiers soient générés automatiquement en fonction de la configuration sélectionnée.

Questions connexes