WPF: Erfassen der Abmessungen des aktuellen Bildschirms
Das Abrufen der Größe des primären Bildschirms ist mit SystemParameters unkompliziert, die Größe des aktuellen Bildschirms muss jedoch bestimmt werden Der Bildschirm kann komplexer sein, insbesondere bei Konfigurationen mit mehreren Bildschirmen. Um dieser Herausforderung zu begegnen, sollten Sie den folgenden Ansatz in Betracht ziehen:
Verwendung eines WinForms-Bildschirm-Wrappers
Erstellen eines WPF-kompatiblen Wrappers um das bereitgestellte System.Windows.Forms.Screen-Objekt eine bequeme Möglichkeit, auf bildschirmbezogene Informationen zuzugreifen. Hier ist eine Beispielimplementierung:
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); 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) { 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; } } }
Zugriff auf Bildschirmabmessungen in XAML
Während der Zugriff auf die Bildschirmgröße über XAML nicht direkt möglich ist, können Sie angehängte Eigenschaften in Kombination verwenden mit der Wrapper-Klasse:
<UserControl> <UserControl.Resources> <local:WpfScreenExtension x:Key="ScreenExtension" /> </UserControl.Resources> <StackPanel> <TextBlock Text="Device Bounds Width: {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=Width, Converter={StaticResource ScreenExtension}}" VerticalAlignment="Center" /> <TextBlock Text="Working Area Height: {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=Height, Converter={StaticResource ScreenExtension}}" VerticalAlignment="Center" /> </StackPanel> </UserControl>
public class WpfScreenExtension : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { UserControl userControl = value as UserControl; if (userControl == null) return null; Rect bounds = WpfScreen.GetScreenFrom(userControl).DeviceBounds; if (bounds.IsEmpty) return String.Empty; if (parameter?.ToString() == "Width") return bounds.Width; else if (parameter?.ToString() == "Height") return bounds.Height; else return bounds; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } }
Das obige ist der detaillierte Inhalt vonWie erhalte ich effizient die Abmessungen des aktuellen Bildschirms in WPF?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!