Приложение С# WPF подходит в зависимости от размера монитора после максимизации/минимизации после перехода между мониторами
У меня есть два монитора:
Экран 1: дополнительный экран с разрешением 1920x1080
Экран 2: основной экран с разрешением 1600x900
Экран 1 больше экрана 2.
Когда я открываю приложение на экране 2, а затем перемещаю его с экрана 2 на экран 1 и пытаюсь свести к минимуму и затем максимизировать свое приложение, максимальный размер берется по экрану 2, а не по текущему размеру монитора (он не появляется максимально связанный с размером монитора)
Как я могу редактировать свой код, чтобы максимизировать и свести к минимуму разрешение экрана, где приложение существует, а не принимать его в зависимости от основного монитора?
Я использую код в этом потоке для изменения размера: https://blogs.msdn.microsoft.com/llobo/2006/08/01/maximizing-window-with-windowstylenone-considering-taskbar/
Что такое, как этот ответ: qaru.site/info/142518/...
Спасибо
Ответы
Ответ 1
Чтобы получить размер текущего экрана, вам, вероятно, придется использовать метод windows forms FromHandle как
using System.Windows;
using System.Windows.Forms;
using System.Windows.Interop;
namespace TestApp
{
public partial class MainWindow : Window
{
public Screen GetCurrentScreen(Window window)
{
return Screen.FromHandle(new WindowInteropHelper(window).Handle);
}
public MainWindow()
{
InitializeComponent();
var screen = GetCurrentScreen(this);
var height = screen.Bounds.Height;
var width = screen.Bounds.Width;
// ...
}
}
}
Другим вариантом было бы подписаться на событие LocationChanged окна, чтобы узнать, когда окно вашего приложения было перенесено на дополнительный экран, см. Этот ответ StepUp.
Ответ 2
сначала подпишитесь на событие с измененным состоянием:
public MainWindow()
{
InitializeComponent();
this.StateChanged += MainWindow_StateChanged;
}
а затем только после минимизации, восстановите размеры виртуальных/первичных экранов следующим образом: и поскольку я не знаю, каков ваш размер приложения по умолчанию и если он не полный экран, в конце вы можете легко их восстановить с помощью размера экрана SystemParameters, с небольшой логикой.
private void MainWindow_StateChanged(object sender, EventArgs e)
{
if (this.WindowState != WindowState.Minimized)
{
this.Width = SystemParameters.PrimaryScreenWidth;
this.Height = SystemParameters.PrimaryScreenHeight;
//this.Width = SystemParameters.VirtualScreenWidth;
//this.Height =SystemParameters.VirtualScreenHeight;
//this.Width = SystemParameters.WorkArea.Width
//this.Height =SystemParameters.WorkArea.Height;
}
}
которые должны обрабатывать ситуацию, SystemParameters предоставляют следующие данные:
PrimeryScreenHeight/Ширина:
Высота/Ширина экрана.
VirtualScreenWidth/высота:
Ширина/высота виртуального экрана.
WorkArea:
Структура RECT, которая получает координаты рабочей области, выраженные в виде координат виртуального экрана.