2010-04-20 5 views
0

Я поместил элемент управления в сетку. допустим, элемент управления получен из открытого класса «ButBase», который, в свою очередь, получен из System.Windows.Controls.Button. Код обычно компилируется, и приложение работает нормально. Но есть что-то действительно раздражающее.UiElement, основанный на другом классе

Когда вы пытаетесь перейти на вкладку xaml-design, он скажет: «Корневой элемент документа не поддерживается визуальным дизайнером», что нормально, и я полностью согласен с этим, но дело в том, что все код xaml подчеркивается, а VS2010 говорит: «Невозможно создать экземпляр ButBase», хотя он обычно компилируется и может запускаться.

Я пробовал один и тот же код в VS2008, он сказал, что должен видеть открытый конструктор без параметров в ButBase, и даже после того, как я положил его, он показал ту же ошибку.

Что я могу здесь пропустить?

ответ

1

Удостоверьтесь, что ButBase не является abstract. Дизайнеру это не нравится.

Также не забудьте сделать что-нибудь смешное в своем конструкторе, Initialized и Loaded обработчиках. Смешные включают в себя любые нетривиальные задачи, такие как подключение к базе данных или что-то еще, что может помешать дизайнеру. Любой такой код должен быть завернут с помощью проверки конструктора. Существует несколько способов проверить наличие дизайнера, но я нашел следующее, чтобы работать нормально:

internal static class DesignModeChecker 
{ 
    private static bool? _isInDesignModePriv; 

    public static bool IsInDesignMode 
    { 
     get 
     { 
      if (!_isInDesignModePriv.HasValue) 
      { 
       _isInDesignModePriv = Process.GetCurrentProcess().ProcessName.ToLower().Trim() == "devenv" && !Debugger.IsAttached; 
      } 

      return _isInDesignModePriv.Value; 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^