2011-05-20 32 views
5

Por desgracia he encontrado que a veces código que estoy escribiendo, mientras perfectamente bien en tiempo de ejecución, me provoca dolores de cabeza cuando se trabaja con el XAML/diseñador en Visual Studio 2010. Mi favorito ejemplos incluye múltiples cuadros de mensaje para la depuración aparecer, sin embargo, el ejemplo actual es una condición de estilo Singleton muy ligero en el constructor que significa que tengo para reconstruir la solución cuando quiero hacer cambios a la instancia en el XAML.preprocesador de C# - Código de bloqueo para el diseñador XAML

¿Existe una directiva de preprocesador que puedo utilizar para saltar sobre un código XAML en el diseñador?

Ejemplo:

public class CustomFE : FrameworkElement 
    { 
     public CustomFE() 
     { 
#if !XAMLDesigner // Or something similar 
      if (_instance != null) 
       throw new NotSupportedException("Multiple instances not supported"); 
#endif 

      _instance = this; 
     } 

     private static CustomFE _instance = null; 

     public static CustomFE Instance 
     { 
      get { return _instance; } 
     } 
    } 
+0

ver también http://stackoverflow.com/questions/425760/is-there-a-designmode -property-in-wpf –

Respuesta

4

Usted puede utilizar el método DesignerProperties.GetIsInDesignMode, así:

if (!DesignerProperties.GetIsInDesignMode(this) && _instance != null) 
    throw new NotSupportedException(...) 
+0

¿De verdad? No hay preprocesamiento para eso? que aspira un poco ... – Melodatron

+0

@Melodatron - En este momento, no hay directiva de preprocesador y que serían en realidad no funciona. Supongamos que envía CustomFE a otros desarrolladores para usar en sus proyectos. La directiva de preprocesador debe conocerse en tiempo de compilación. Usando el método anterior, el valor se puede cambiar de forma dinámica en función de cómo los desarrolladores lo estén usando. – CodeNaked

Cuestiones relacionadas