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.
-
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)
-
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