Хорошо, во-первых, вот изображение, представляющее экран 4K и экран 1080p с мертвой зоной.Во-вторых, экран 4K настроен на 125% масштабирования.В-третьих, если 1080p также установлен на 125%, ошибка все еще происходит.Однако, если вы установите экран 4K обратно на 100%, то все будет работать как положено.
![enter image description here](https://i.stack.imgur.com/y11qJ.png)
Если окно перемещается с помощью мыши на1080p работает как положено.Однако, если вы используете верхнюю и левую части окна для его перемещения, тогда возникает проблема.
По сути, окно перемещается на второй экран через верхнюю и левую части, но любой код, который пытается манипулироватьграфика в окне просто игнорируется в мертвой зоне.Это включает, но не ограничивается этим, BackgroundColor, Image и т. Д.
Я не уверен, что является причиной этого, но кажется, что когда окно перемещается через верхнюю и левую стороны, оно не устанавливает должным образом отображающий дисплей, когдаосновной экран не в масштабе 100%.
Если вы хотите, чтобы в качестве примера был приведен код, то:
public partial class Magnifier : Window
{
public Magnifier()
{
InitializeComponent();
}
public void Update(D.Bitmap bmp, double x, double y)
{
Preview.Source = GetSource(bmp);
Top = y;
Left = x;
}
public static BitmapSource GetSource(System.Drawing.Bitmap source)
{
var rect = new System.Drawing.Rectangle(0, 0, source.Width, source.Height);
var bitmapData = source.LockBits(
rect,
ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
try
{
var size = (rect.Width * rect.Height) * 4;
return BitmapSource.Create(
source.Width,
source.Height,
source.HorizontalResolution,
source.VerticalResolution,
PixelFormats.Bgra32,
null,
bitmapData.Scan0,
size,
bitmapData.Stride);
}
finally
{
source.UnlockBits(bitmapData);
}
}
}
В приведенном выше коде x и y уже масштабированы доправильный DPI перед их передачей в метод Update.Окно действительно перемещается в ожидаемое место на обоих экранах.Несмотря на то, что у меня есть растровое изображение, я также проверил, просто пытаясь установить BackgroundColor.Он также не может обновиться в мертвой зоне.
Окно обновляется в DispatchTimer и работает, как и ожидалось, везде, кроме мертвой зоны.
Видеокарта: Nvidia 1080 GTX - последние версии драйверов
Я тестировал следующие версии .Net: 4.6, 4.7.1 и 4.7.2.
Есть какие-либо мысли или предложения по этому вопросу?Кто-нибудь еще сталкивался с этой проблемой?
Редактировать 1:
Мое подозрение действительно верно, окно не обновляет своего владельца / возможности дисплея на дополнительном экране, если расположено сверху и слева.
Я поместил окно при запуске в мертвую зону.Это не работает.Затем я схватил его мышью, и окно dpi отрегулировалось и настроилось на дополнительный дисплей.После этого все работало без проблем.