2010-11-28 24 views
9

Tengo un código escrito en C# WPF, y tengo algún código para la depuración, que actualmente compilo dentro o fuera para el modo de depuración o versión. ¿Cómo puedo habilitar o deshabilitar los controles de UI que están escritos actualmente en mi XAML según las definiciones del preprocesador de C#?Compilación condicional del preprocesador en XAML

+0

No hay preprocesador en C# pero hay directivas de preprocesador que se procesan como si hubiera una. http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=VS.100).aspx –

+0

posible duplicado de [XAML Conditional Compilation] (http://stackoverflow.com/questions/1213576/xaml- compilación condicional) –

Respuesta

12

Puede añadir un poco de código en el constructor que activa/desactiva los elementos:

public MainWindow() 
{ 
    InitializeComponent(); 

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

Realmente estaba pensando en cómo podrían no existir en primer lugar, pero supongo que esto servirá. – Puppy

+0

No es posible analizar XAML según los símbolos del preprocesador. Creo que eso es lo que estás buscando? –

+1

No puede hacerlo en símbolos de preprocesador, pero Xaml sí admite la compilación condicional de secciones, utilizando las características de Compatibilidad de marcado. La respuesta de ptahmose se relaciona con una pregunta que enlaza con un artículo sobre ellos. Es lo más cercano que obtendrás. –

0

Hay dos maneras de hacer esto. Uno está utilizando las directivas de preprocesador que pueden enmascarar secciones completas de código ejecutándolas solo en una compilación en particular. O puede usar el atributo condicional para bloquear fácilmente un método completo. http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=420
Aquí hay una descripción de la diferencia entre los dos: http://www.thinkfarahead.com/2007/09/if-debug-vs-conditional.html. Puede hacer referencia a los controles en su código proporcionando un atributo x: Name en xaml y poniendo el código para deshabilitar los controles en la sección condicional de su código.

Actualizado: para ser más claro mencionado x: Nombre del atributo.

+2

Esos enlaces tratan de la compilación condicional de C#. No son aplicables a Xaml. La pregunta era sobre Xaml. –

+1

No lea atentamente: "Controles definidos en xaml" ... "según las definiciones del preconcesador C#" Los controles están en xaml. Él quiere desactivar en C# – basarat

3

No hay directivas de preprocesador para XAML. Sin embargo, puede incluir y excluir archivos XAML en función de la configuración de compilación, lo que le proporciona cierto control. Esto podría proporcionarle una forma de incluir variaciones de un archivo dependiendo de la configuración de compilación elegida. Por supuesto, la desventaja es que tendría que mantener múltiples versiones de un archivo. Esto podría mitigarse mediante el uso de T4 templates para que los diferentes archivos se generen automáticamente de acuerdo con la configuración seleccionada.

Cuestiones relacionadas