WPF: Окно остается минимизированным даже когда установка WindowState явно

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

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

Код ниже должен сделать просто это, но по некоторым причинам он не делает:

private void TrayIcon_DoubleClick(object sender, EventArgs e)
{
    if (this.Visibility == Visibility.Hidden)
    {
        this.Visibility = Visibility.Visible;
        this.WindowState = WindowState.Normal;
        this.Activate();
    }
    ...
}

Приложение остается минимизированным и не принесено к переднему плану. Активируйтесь (), отвечает на истинные и последующие звонки к TrayIcon_DoubleClick (), указывают, что состояние действительно установлено на Нормальный.

9
задан dreijer 6 March 2010 в 06:26
поделиться

1 ответ

Я разместил свой вопрос на форумах MSDN, и на него там ответили. Цитирую ответ:


Некоторые свойства Window, которые больше похожи на методы, в том смысле, что они вызывают сложные действия, должны происходить после того, как предыдущее действие уже завершено. Один из способов добиться этого - использовать Dispatcher.BeginInvoke. Если вы измените свой код так, чтобы он выглядел следующим образом, это должно сработать:

if (this.Visibility == Visibility.Hidden)
{
    this.Visibility = Visibility.Visible;
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        new Action(delegate()
        {
            this.WindowState = WindowState.Normal;
            this.Activate();
        })
    );
}

Я попробовал это, и это решило проблему для меня. Также, я думаю, вы можете опустить this.Activate().

14
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: