Detectar el modo de diseño en el método "OnApplyTemplate" - control personalizado

Así es como mi OnApplyTemplate mira:

public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            if (DesignerProperties.IsInDesignTool) return;

            this.partTextBox = this.GetTemplateChild(PartTextBox) as TextBox;
            this.partButton = this.GetTemplateChild(PartButton) as Button;

            if (this.partTextBox == null || this.partButton == null)
            {
                throw new NullReferenceException("Template part(s) not available");
            }

            this.partTextBox.LostFocus += this.OnTextBoxLostFocus;
            this.partButton.Click += this.OnButtonClick;

            if (this.DataProvider == null)
            {
                throw new NotSupportedException("DataProvider wasn't specified");
            }

La segunda línea donde verifico IsInDesignTool me da un error que dice que no puedo acceder a la clase interna "DesignerProperties" aquí.

Básicamente, lo que sucede es que cuando arrastro mi control desde la barra de herramientas a la vista en el diseño, arroja una excepción porque DataProvider no se especifica. Entonces, necesito deshabilitar este código por tiempo de diseño.

¿Cómo lo hago?

preguntado el 08 de noviembre de 11 a las 17:11

2 Respuestas

Tal vez haya otra clase en algún lugar llamada DesignerProperties que esté interfiriendo con la que realmente desea usar. Qué tal si:

if (System.ComponentModel.DesignerProperties.IsInDesignTool) return;

respondido 09 nov., 11:01

¡Sí, funcionó! Lo comprobé, ¡había 4! posibles DesignerProperties! - Katit

Creo que el código correcto es

            if (DesignerProperties.GetIsInDesignTool(this)) return;

respondido 08 nov., 11:23

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.