WPF Otwieranie nowego okienka wyśrodkowanego do okienka rodzica nie działa dla dwóch monitorów

0

Witam serdecznie,

próbuję zrobić progressbar w osobnym okienku, które pojawia się na środku okienka rodzica.
Okienko z progressbarem powinno mieć taki rozmiar jak okno rodzica, z tą różnicą, że sam progressbar z informacją jest na środku, a reszta jest zaciemniona.
Wszystko działa mi OK poza dwoma przypadkami.

  1. Ustawiam okno rodzica tak, aby część była na jednym monitorze a część na drugim. Wtedy okno z progressbarem jest wyśrodkowane w pionie, ale w poziomie zawsze zaczyna się od krawędzi monitora na którym jest większość okienka rodzica i wychodzi za okno rodzica. Dodam, że monitory mogą mieć różną rozdzielczość. (Tutaj rysunek)
    ProgressBar.png

  2. Moja aplikacja posiada tablzControl z pakietu dragblz.netcore, jest to kontrolka z zakładkami, które można wyciągać do osobnych okienek, czyli jeśli mamy zakładki A, B i C, ale zakładkę A i B chcemy widzieć jednocześnie, to jedną z nich wyciągamy na zewnątrz i mamy dwa okienka, jedno z zakładkami A i C a drugi z zakładką B. I tu jest kolejny problem, bo wtedy to okienko z progressbarem zawsze jest na pełny ekran rozciągnięte i wyświetla się tylko na monitorze głównym.

Zrobiłem to w taki sposób, że w VM tworzę obiekt ProgressBar (Window), sprawdzam czy okienko z którego wywołuje progressbar jest na pełnym ekranie, jeśli tak to ustawiam
progressBar.WindowState = WindowState.Maximized, jeśli nie to ustawiam progressBar.WindowState = WindowState.Normal.
Następnie ustawiam szerokość i wysokość okienka progressBar na taką jak ma okienko rodzica a następnie ustawiam progressBar.Owner = App.Current.MainWindow.
Na końcu otwieram progressBara a po zakończeniu pobierania danych go zamykam.

                if(App.Current.MainWindow.WindowState == WindowState.Maximized)
                {
                    progressBar.WindowState = WindowState.Maximized;
                } else
                {
                    progressBar.WindowState = WindowState.Normal;
                }
                progressBar.Width = App.Current.MainWindow.Width;
                progressBar.Height = App.Current.MainWindow.Height;
                progressBar.Owner = App.Current.MainWindow;
                progressBar.Show();
                // ... pobieranie danych
                progressBar.Close();
 

Dodatkowo okienko z progressBarem (Window) ma ustawioną właściwość WindowStartupLocation na "CenterOwner".

Jak mogę rozwiązać ten problem? Najpilniejszy jest ten opisany w punkcie pierwszym.

Pozdrawiam

0

Witam,

Tak na szybko to polecam BusyIndicator.

Pozdrawiam,

mr-owl

1 użytkowników online, w tym zalogowanych: 0, gości: 1