사용하여 기본 화면의 크기를 얻을 수 있다는 것을 알고 있습니다.
System.Windows.SystemParameters.PrimaryScreenWidth;
System.Windows.SystemParameters.PrimaryScreenHeight;
하지만 현재 화면의 크기를 어떻게 알 수 있습니까? (멀티 스크린 사용자가 항상 기본 화면을 사용하는 것은 아니며 모든 화면이 동일한 해상도를 사용하는 것은 아닙니다.)
XAML에서 크기에 액세스 할 수 있으면 좋겠지 만 코드 (C #)로도 충분합니다.
답변
내가 아는 한 현재 모니터의 크기를 가져 오는 기본 WPF 함수는 없습니다. 대신 기본 다중 디스플레이 모니터 함수를 PInvoke 하고 관리되는 클래스로 래핑하고 XAML에서 사용하는 데 필요한 모든 속성을 노출 할 수 있습니다.
답변
System.Windows.Forms에서 화면 주위에 작은 래퍼를 만들었습니다. 현재 모든 것이 작동합니다. “장치 독립 픽셀”에 대해서는 확실하지 않습니다.
public class WpfScreen
{
public static IEnumerable<WpfScreen> AllScreens()
{
foreach (Screen screen in System.Windows.Forms.Screen.AllScreens)
{
yield return new WpfScreen(screen);
}
}
public static WpfScreen GetScreenFrom(Window window)
{
WindowInteropHelper windowInteropHelper = new WindowInteropHelper(window);
Screen screen = System.Windows.Forms.Screen.FromHandle(windowInteropHelper.Handle);
WpfScreen wpfScreen = new WpfScreen(screen);
return wpfScreen;
}
public static WpfScreen GetScreenFrom(Point point)
{
int x = (int) Math.Round(point.X);
int y = (int) Math.Round(point.Y);
// are x,y device-independent-pixels ??
System.Drawing.Point drawingPoint = new System.Drawing.Point(x, y);
Screen screen = System.Windows.Forms.Screen.FromPoint(drawingPoint);
WpfScreen wpfScreen = new WpfScreen(screen);
return wpfScreen;
}
public static WpfScreen Primary
{
get { return new WpfScreen(System.Windows.Forms.Screen.PrimaryScreen); }
}
private readonly Screen screen;
internal WpfScreen(System.Windows.Forms.Screen screen)
{
this.screen = screen;
}
public Rect DeviceBounds
{
get { return this.GetRect(this.screen.Bounds); }
}
public Rect WorkingArea
{
get { return this.GetRect(this.screen.WorkingArea); }
}
private Rect GetRect(Rectangle value)
{
// should x, y, width, height be device-independent-pixels ??
return new Rect
{
X = value.X,
Y = value.Y,
Width = value.Width,
Height = value.Height
};
}
public bool IsPrimary
{
get { return this.screen.Primary; }
}
public string DeviceName
{
get { return this.screen.DeviceName; }
}
}
답변
여기 친구. 이것은 작업 영역의 너비와 높이 만 제공합니다.
System.Windows.SystemParameters.WorkArea.Width
System.Windows.SystemParameters.WorkArea.Height
답변
이것은 창의 왼쪽 상단을 기반으로 현재 화면을 제공합니다. 현재 화면에 대한 정보를 얻으려면 this.CurrentScreen ()을 호출하십시오.
using System.Windows;
using System.Windows.Forms;
namespace Common.Helpers
{
public static class WindowHelpers
{
public static Screen CurrentScreen(this Window window)
{
return Screen.FromPoint(new System.Drawing.Point((int)window.Left,(int)window.Top));
}
}
}
답변
시간을내어 SystemParameters 멤버를 살펴보십시오.
VirtualScreenWidth
VirtualScreenHeight
이것은 심지어 스크린의 상대적인 위치를 고려합니다.
두 대의 모니터에서만 테스트되었습니다.
답변
왜 이것을 사용하지 않습니까?
var interopHelper = new WindowInteropHelper(System.Windows.Application.Current.MainWindow);
var activeScreen = Screen.FromHandle(interopHelper.Handle);
답변
System.Windows.Forms 클래스 사용에 익숙하다면 System.Windows.Forms 클래스 참조 를 프로젝트에 추가하면됩니다 .
솔루션 탐색기 -> 참조 -> 참조 추가 …- > (어셈블리 : 프레임 워크) -> 아래로 스크롤하여 System.Windows.Forms 어셈블리-> 확인을 확인 합니다.
이제 System.Windows.Forms를 사용하여 추가 할 수 있습니다 . 이전과 마찬가지로 wpf 프로젝트에서 진술하고 화면을 사용하십시오.