나는 요구 사항을 이해합니다. 문제는 이러한 값을 얻기위한 WPF 메서드가 있다는 것입니다.하지만 그렇습니다. 해결책은 이러한 모든 해결 방법을 얻는 것이 아니라 깨끗한 디자인 및 개발에 따라 초기 접근 방식을 변경하는 것입니다.
A) 초기 메인 창을 화면으로 설정
B) 유용한 WPF 메서드를 포함하여 ActualWindow의 값을 가져옵니다.
C) 크기 조정, 최소화 등 원하는 동작에 대해 원하는만큼 Windows를 추가 할 수 있지만 이제는 항상로드 및 렌더링 된 화면에 액세스 할 수 있습니다.
다음 예제에주의하십시오. 그런 종류의 접근 방식을 사용해야하는 코드가 있지만 작동해야합니다 (화면의 각 모서리에 대한 포인트를 제공합니다). Working Example on Single, 듀얼 모니터 및 다양한 해상도 (Primal Main Window Class 내) :
InitializeComponent();
[…]
ActualWindow.AddHandler(Window.LoadedEvent, new RoutedEventHandler(StartUpScreenLoaded));
라우트 된 이벤트 :
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);
}