Определить режим разработки методом «OnApplyTemplate» — пользовательский элемент управления

#c# #silverlight #xaml #custom-controls

#c# #silverlight #xaml #пользовательские элементы управления

Вопрос:

Вот как OnApplyTemplate выглядит мой:

 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");
            }
  

Вторая строка, в которой я проверяю IsInDesignTool, выдает ошибку, в которой говорится, что я не могу получить доступ к внутреннему классу «DesignerProperties» здесь.

В основном, что происходит, когда я перетаскиваю свой элемент управления с панели инструментов в режим просмотра в design, он выдает исключение, потому что dataProvider не указан. Итак, мне нужно отключить этот код на время разработки.

Как мне это сделать?

Ответ №1:

Возможно, где-то есть другой класс, называемый DesignerProperties, который мешает тому, который вы действительно хотите использовать. Как насчет:

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

Комментарии:

1. Да, это сработало! Я проверил — было 4! возможных свойства DesignerProperties!

Ответ №2:

Я думаю, что правильный код,

             if (DesignerProperties.GetIsInDesignTool(this)) return;