Tôi hiểu những yêu cầu. Vấn đề là, có các Phương pháp WPF để nhận các giá trị đó - nhưng có, một trong những người đóng góp là đúng, không phải trực tiếp. Giải pháp không phải là để có được tất cả những cách giải quyết đó, mà là thay đổi cách tiếp cận ban đầu theo Thiết kế và Phát triển sạch.
A) Đặt Cửa sổ chính ban đầu thành Màn hình
B) Nhận các giá trị cho ActualWindow bao gồm nhiều phương pháp WPF hữu ích
C) Bạn có thể thêm bao nhiêu Windows tùy thích cho hành vi bạn muốn, như có thể thay đổi kích thước, thu nhỏ bất kỳ thứ gì… nhưng bây giờ bạn luôn có thể truy cập Màn hình đã tải và Kết xuất
Hãy cẩn thận với ví dụ sau, có một số Mã xung quanh khiến bạn cần phải sử dụng kiểu tiếp cận đó, tuy nhiên nó sẽ hoạt động (Nó sẽ cung cấp cho bạn Điểm cho mỗi góc của màn hình của bạn): Ví dụ làm việc trên đơn, Màn hình kép và các độ phân giải khác nhau (Trong lớp cửa sổ chính Primal):
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
Sự kiện được định tuyến:
private void StartUpScreenLoaded(object sender, RoutedEventArgs e)
{
Window StartUpScreen = sender as Window;
Dispatcher.Invoke(new Action(() =>
{
StartUpScreen.InvalidateVisual();
System.Windows.Point CoordinatesTopRight = StartUpScreen.TranslatePoint(new System.Windows.Point((StartUpScreen.ActualWidth), (0d)), ActualWindow);
System.Windows.Point CoordinatesBottomRight = StartUpScreen.TranslatePoint(new System.Windows.Point((StartUpScreen.ActualWidth), (StartUpScreen.ActualHeight)), ActualWindow);
System.Windows.Point CoordinatesBottomLeft = StartUpScreen.TranslatePoint(new System.Windows.Point((0d), (StartUpScreen.ActualHeight)), ActualWindow);
System.Windows.Application.Current.Resources["StartUpScreenPointTopRight"] = CoordinatesTopRight;
System.Windows.Application.Current.Resources["StartUpScreenPointBottomRight"] = CoordinatesBottomRight;
System.Windows.Application.Current.Resources["StartUpScreenPointBottomLeft"] = CoordinatesBottomLeft;
}), DispatcherPriority.Loaded);
}