WPF всегда на высоте
Возможно ли, чтобы окно оставалось всегда сверху, даже когда другое приложение работает на Fullscreen? Я использую прямо сейчас TopMost = true
, но когда другое приложение работает в полноэкранном режиме, мой вид становится невидимым. Это WindowStyle = None
окно кстати.
Изменить. И не позволяйте другому окну минимально использовать
Ответы
Ответ 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;
}