Подтвердить что ты не робот

WPF всегда на высоте

Возможно ли, чтобы окно оставалось всегда сверху, даже когда другое приложение работает на Fullscreen? Я использую прямо сейчас TopMost = true, но когда другое приложение работает в полноэкранном режиме, мой вид становится невидимым. Это WindowStyle = None окно кстати.

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

4b9b3361

Ответ 1

Это не будет работать в 100% случаев, но это немного улучшит ситуацию. Вы можете установить Topmost = true в обработчике события Window.Deactivated:

private void Window_Deactivated(object sender, EventArgs e)
{
    Window window = (Window)sender;
    window.Topmost = true;
}

Событие Deactivated будет вызываться всякий раз, когда ваше приложение теряет фокус (часто, когда другое приложение запрашивает Topmost), и таким образом это будет reset ваше приложение сверху после этого.

Ответ 2

Попробуйте это решение из MSDN, оно должно работать для вас. В Window Activated Event добавьте следующий код:

this.Width = System.Windows.SystemParameters.PrimaryScreenWidth;
this.Height = System.Windows.SystemParameters.PrimaryScreenHeight;
this.Topmost = true;
this.Top = 0;
this.Left=0;

в DeActivated Event добавить следующий код

this.Topmost = true;
this.Activate();

Исходный пост из MSDN

Ответ 3

Если вы хотите, чтобы ваше приложение оставалось на вершине ВСЕГО (включая начальный интерфейс в Windows 8, ранее известный как "Metro" ), вы можете указать UiAccess = "True" в вашем файле манифеста. Обычно это используется приложениями доступности, такими как экранные клавиатуры.

Из памяти вам нужно сделать 3 вещи;

  • Запрос UiAccess = "True"
  • Подпишите свой EXE файл приложения с признанным сертификатом. Я получил бесплатный сертификат подписи кода от Certum, так как моим проектом является Open Source.
  • Установите приложение в "доверенное местоположение", которое в моем случае было каталогом файлов программ. Официального определения "Надежное местоположение" нет.

Ответ 4

У меня было главное окно, которое я хотел бы держать поверх всего (если пользователь проверял "всегда сверху".
Это сработало для меня. Надеюсь, это поможет кому-то.

        // If we want main to stay on top, we set the rest of the menus to Not be top 
        if (mnuViewMainWindowAlwaysOnTopo.IsChecked)
        {
            this.Topmost = true;
            foreach (Window window in Application.Current.Windows)
            {
                // Don't change for main window
                if (window.GetType().Name != this.GetType().Name)
                {
                    window.Topmost = false;
                }
            }
        }
        else
        {
            this.Topmost = false;
        }