更改主题调用UserControl_Loaded事件

时间:2011-09-28 04:41:55

标签: c# wpf

我不明白为什么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 个答案:

答案 0 :(得分:2)

你可以有一个布尔字段,用于存储对话框是否显示的状态。如果您更改主题,UI元素将自然重新加载,事件将再次触发。

if (!_diagWasShown)
{
    _diagWasShown = true;
    //Show dialogue
}

答案 1 :(得分:1)

你可以创建bool变量,它将指示是否显示MessageBox。

bool isUserMessageBoxShown = false;
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    if (!isUserMessageBoxShown)
    {
        MessageBox.Show("User Control Loaded.","WPF");
        isUserMessageBoxShown  = true; 
    }
}