Изменение темы вызывает событие UserControl_Loaded - PullRequest
0 голосов
/ 28 сентября 2011

Я не понимаю, почему поведение пользовательского элемента управления WPF и формы пользователя Windows отличается. Я добавил окно загруженного события, которое просто показывает окно сообщения как:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Main Window Loaded","WPF");
    }

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

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("User Control Loaded.","WPF");
    }

Я поместил этот пользовательский элемент управления в главное окно.

Когда я запускаю это, я получаю и окно сообщения, и пользовательские элементы управления, и окна.

Теперь, когда я изменяю свою тему с Aero на любую Высококонтрастную, снова появляется окно сообщения пользовательского элемента управления.

Почему это происходит? Почему это отличается от формы Windows? Что я должен сделать, чтобы не показывать это несколько раз?

Wajeed

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

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

if (!_diagWasShown)
{
    _diagWasShown = true;
    //Show dialogue
}
1 голос
/ 28 сентября 2011

вы можете создать переменную bool, которая будет указывать, отображался ли MessageBox.

bool isUserMessageBoxShown = false;
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    if (!isUserMessageBoxShown)
    {
        MessageBox.Show("User Control Loaded.","WPF");
        isUserMessageBoxShown  = true; 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...