Animacja minimalizowania okna oraz rozmiar okna przy zmaksymalizowanym oknie - CustomWindow

0

Witam ponownie drodzy koledzy :)
Mam pewne problemy o których ciężko coś znaleźć.
Pierwszy to jak zrobić aby podczas minimalizowania okna była obecna animacja jak to bywa w większości aplikacji pod windows z aero.

WindowStyle = WindowStyle.None;
AllowsTransparency = true;
Background = new SolidColorBrush() { Opacity = 0 };

Drugi to taki gdzie mogę dostać się do rozmiaru okna niezmaksymalizowanego gdy okno jest zmaksymalizowane?
Gdzieś to musi być zapisane bo jak przywracamy okno z zmaksymalizowanego do zwykłego to okno powraca do wcześniejszych rozmiarów.
O ile pozycja okna niezminimalizowanego (gdy aktualnie okno jest zmaksymalizowane) to Top i Left, to Width/ActualWidth oraz Height/ActualHeight jest błędne (pokazuje rozmiar okna zmaksymalizowanego).

0

Co do styli to ja po prostu używam standardowego stylu Aero2, może to rozwiąże Ci sprawę.

Co do rozmiaru okna zmaksymalizowanego, możesz pobrać Screen, na którym znajduje się okno, a potem rozmiar Screen-a.
Screen jest w System.Windows.Forms, więc będziesz musiał dodać referencję do projektu.

var screen = Screen.FromHandle(new WindowInteropHandler(window).Handle); // window to Twoje okno.
i tu masz screen.WorkingArea.Width i screen.WorkingArea.Height

Przepraszam nie zwróciłem uwagi, Tobie chodzi o rozmiar okna przed maksymalizacją.
Generalnie mój post do usunięcia.

Nie miałem nigdy takich wymogów, ale może mógłbyś dorzucić do Window dodatkowe DependencyProperty i potem Behavior-em podpiąć się pod zdarzenie SizeChanged i sprawdzać czy po zmianie rozmiaru jest zmaksymalizowane, jeżeli tak to wtedy poprzedni rozmiar zapisywać właśnie do tych DependencyProperty.

Wujek google zna jeszcze lepszą odpowiedź: https://msdn.microsoft.com/en-us/library/system.windows.window.restorebounds%28v=vs.110%29.aspx

Pozdrawiam.

0

Próbowałem użyć RestoreBounds lecz wartości nie są uzupełnione (patrz screenshot).

0

Spróbuj na szybko podpiąć się w oknie pod SizeChanged i przy każdej zmianie rozmiaru sprawdzaj czy State != Maximized, jeżeli tak to odkładaj rozmiar.
W ten sposób będziesz miał odłożony rozmiar ostatniego rozmiaru okna w trakcie gdy okno będzie zmaksymalizowane.

Pewnie będziesz też musiał jakoś obsłużyć stan minimalizowania, ale to inna bajka.
Jak to zadziała zrób sobie z tego Behavior i załatwione.

Dziwi mnie jednak, że to nie działa tak jak pisze MSDN, może jest jakiś myk ??? Gdyby to był jednak faktycznie BUG MS-a to możesz spróbować zrobić tak jak napisałem wyżej.

Pozdrawiam.

0

Tego się obawiałem że będę musiał się w to wstrzelić. Myślałem że jest jakiś inny sposób który działa. Czyli problem nr 2 pośrednio rozwiązany bo takie rozwiązanie to już miałem w głowie ale chciałem coś lepszego :)
Jeszcze został problem nr 1. Dodam że znajdujące się w sieci przykłady dotyczące zrobienia tej animacji także nie działają. Nie mogę AllowsTransparency ustawiać na false w zdarzeniach + WindowStyle nie mogę zmieniać jeśli AllowsTransparency jest na true :) Taki o deadlock :)

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