Мое приложение имеет значок панели задач, который, когда дважды щелкнувший, скрывает или показывает окно приложения. Моя проблема - то, что я, может казаться, не приношу окно к переднему плану, если это было в минимизированном состоянии, когда это было скрыто.
Например, скажите, что пользователь минимизирует приложение и затем дважды щелкает по значку панели задач. Окно приложения тогда скрыто и исчезает из панели задач. Когда пользователь дважды щелкает по значку панели задач снова, окно приложения должно появиться, т.е. это должно быть восстановлено от минимизированного состояния и принесено к переднему плану.
Код ниже должен сделать просто это, но по некоторым причинам он не делает:
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 (), указывают, что состояние действительно установлено на Нормальный.
Я разместил свой вопрос на форумах 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()
.