Почему я получаю сообщение об ошибке в MainWindow при попытке инициализировать текстовое поле в UserControl - PullRequest
0 голосов
/ 16 января 2012

Я создал UserControl, который содержит textbox.Когда я пытаюсь инициализировать textbox в конструкторе UserControl, с таким текстом, как этот

public FileSelector()
{
    InitializeComponent();
    TB_FolderPath.Text = @"c:\tmp\Test\";
}

, я получаю ошибку в MainWindow.xaml

Невозможно создать экземпляр «FileSelector».

Когда я удаляю строку

TB_FolderPath.Text = @"c:\tmp\Test\";

Я не получаю сообщение об ошибке, но, конечно, пустой textbox.

Ранее, когда в MainWindow были интегрированы части UserControl, проблем также не было.

Я пытался создать более простую версию MainWindow, используя UserControl чтобы воспроизвести проблему, но в простом случае это работает.

Итак, мои вопросы.

  • В чем может быть причина проблемы?

  • Как я могу систематически отлаживать / анализировать подобные проблемы?Я просто получаю эту ошибку в VisualStudio после сборки, без объяснения причин.

  • Как / Где я могу инициализировать элементы управления в UserControl.В общем, UserControl - правильное место для инициализации элементов управления или MainWindow также будет возможностью?(Возможно ли это вообще?)

1 Ответ

2 голосов
/ 16 января 2012

В WPF, в отличие от WinForms, элементы управления не инициализируются полностью после InitializeComponent (). Следовательно, неинициализированные / выгруженные элементы управления выдают ошибки.

Вам нужно написать обработчик для захвата события Loaded элемента управления.

Чтение События жизненного цикла объекта .

Получить более подробную информацию здесь .


Пример (частично взят из кода ОП):

public FileSelector()
{
    InitializeComponent();
    TB_FolderPath.Loaded += delegate { TB_FolderPath.Text = @"c:\tmp\Test\"; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...