UserControl: использовать пользовательское свойство в конструкторе - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть эта проблема:

Я создал пользовательский UserControl и добавил это свойство:

public string TestString { get; set; }

и все в порядке, в свойствах, которые я могу редактироватьэто:

enter image description here

Теперь это проблема: мне нужно прочитать это свойство в конструкторе моего usercontrol: чтобы просто проверить это у меня есть этот код:

public ucnTest()
{
    InitializeComponent();
    MessageBox.Show(TestString);
}

и когда я бегу, я получаю это:

enter image description here

кажется, что во время конструктора значение еще не передано... как это исправить?

PS: если я добавлю сообщение в событие загрузки, оно будет работать:

private void ucnTest_Load(object sender, EventArgs e)
{
    MessageBox.Show(TestString);
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Эмпирическое правило WPF / UWP: все визуальные действия должны выполняться не раньше, чем событие Loaded.Частично загруженный элемент управления может вести себя странно или даже зависать.Таким образом, вытаскивать окно сообщения непосредственно из конструктора - это действительно очень плохая идея с самого начала.

0 голосов
/ 25 февраля 2019

Чтобы понять, что происходит, я предлагаю вам взглянуть на метод InitializeComponent () вашего конструктора форм (или там, где вы добавили свой UserControl).

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

Если вам действительно нужно получить доступ к значению в конструкторе, вам нужно передать его в качестве параметра следующим образом:

public string TestString { get; set; }
public ucnTest(string myStringValue)
{
    InitializeComponent();
    TestString = myStringValue;
    MessageBox.Show(TestString);
}

, а затем вам нужно передать "YourString" конструктору в методе InitializeComponent ().

РЕДАКТИРОВАТЬ: добавлено свойство в код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...