UiElement на основе другого класса - PullRequest
0 голосов
/ 20 апреля 2010

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

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

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

Что мне здесь не хватает?

1 Ответ

1 голос
/ 23 апреля 2010

Убедитесь, что ButBase не abstract. Дизайнер таких не любит.

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

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...