有没有办法确定在任何桌面连接的监视器中当前是否可以看到打开的WPF窗口?通过可见我的意思是窗口的边界矩形与任何监视器的桌面矩形相交.
我需要此功能来确定是否需要重新定位窗口,因为监视器配置(工作区域边界,监视器计数)在应用程序重新启动(保存窗口位置)之间发生了变化.
我已经提出了下面的代码,它似乎工作,但它有几个问题:
您是否知道解决上述部分或全部3个问题的解决方案?
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
internal static class Desktop
{
private static Size dpiFactor = new Size(1.0, 1.0);
private static bool isInitialized;
public static IEnumerable<Rect> WorkingAreas
{
get
{
return
Screen.AllScreens.Select(
screen =>
new Rect(
screen.WorkingArea.Left * dpiFactor.Width,
screen.WorkingArea.Top * dpiFactor.Height,
screen.WorkingArea.Width * dpiFactor.Width,
screen.WorkingArea.Height * dpiFactor.Height));
}
}
public static void TryInitialize(Visual visual)
{
if (isInitialized)
{
return;
}
var ps = PresentationSource.FromVisual(visual);
if (ps == null) …Run Code Online (Sandbox Code Playgroud) 是否可以确定表单所在的屏幕?不是位置或大小!
我用了
Dim myScreens() As Screen = Screen.AllScreens
Me.Left = (myScreens(0).WorkingArea.Width - Me.Size.Width) / 2
Me.Top = (myScreens(0).WorkingArea.Height - Me.Size.Height) / 2
Run Code Online (Sandbox Code Playgroud)
提出表格.当用户将表单重定位到另一个屏幕时,我想保存该新屏幕的位置!