2010-02-01 8 views
5

muszę włączyć następujące na mojej aplikacji (C# WPF):Włącz maksymalizacji, minimalizacji i przywracanie okna w WPF (ręczne Resize jest wyłączone)

  1. mają normalny rozmiar 1024 * 768
  2. The użytkownik może zwiększyć aplikacja
  3. użytkownik może zminimalizować aplikację
  4. użytkownik może przywrócić aplikację (1024 * 768)
  5. użytkownik nie może ręcznie zmienić rozmiar aplikacji przez przeciągnięcie jej granicy.

Nie ma żadnego ResizeMode spełnia wszystkie te wymagania. Czy jest jakiś sposób?

+2

dodając properities oknie programu 'height = "1024" width = "768" ResizeMode = "CanMinimize"' co możliwe osiągnąć wszystko oprócz punktu 2. – ChrisF

+0

Czy możesz nam powiedzieć, dlaczego chcesz naprawić okno w określonym rozmiarze? To może pomóc nam wymyślić jakieś rozwiązania. –

+0

Pracuję nad programem medycznym, który przedstawia obraz medyczny. Program starszego typu miał stały rozmiar 1024 * 768. Dlatego dla starych klientów musimy zachować ją jako podstawową rozdzielczość. Chcemy mieć opcję maksymalizacji okna, abyśmy mogli sprawdzić program pod pewnymi zestawami rozdzielczości bez konieczności testowania jakości prezentowanego obrazu w przypadku zmiany rozmiaru przez użytkownika aplikacji na niestandardowy rozmiar. – Nir

Odpowiedz

0

Możesz odsłuchać zdarzenie Window.SizeChanged, a wewnątrz programu obsługi ustawić ręcznie Szerokość i Wysokość z powrotem na 1027 i 768. Wciąż pozwala użytkownikowi przeciągnąć krawędzie okna, aby zmienić rozmiar, ale wtedy okno wraca do swojego zestawu rozmiar. Wadą tego jest to, że okno ma "napad", gdy użytkownik próbuje zmienić rozmiar - nie jest to najładniejsza rzecz do zobaczenia. Minimalizuj i maksymalizuj pracę jak zwykle.

+0

Dzięki, Próbowałem już tego. Migotanie ("Seizure"), które napotkałem (jak powiedziałeś) spowodowało, że opuściłem ten pomysł na początku. – Nir

5

W końcu znalazłem stosunkowo przyzwoite rozwiązanie.

Chodzi o to, aby zdarzenie zostało usunięte z okna, anuluj wiązania Min/Max i odśwież je.

Jeśli okno nie jest zmaksymalizowane, po prostu zastosować powrotem ograniczeń Min/Max

protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == WindowState.Maximized) 
     { 
      MinWidth = 0; 
      MinHeight = 0; 
      MaxWidth = int.MaxValue; 
      MaxHeight = int.MaxValue; 

      if (!m_isDuringMaximizing) 
      { 
       m_isDuringMaximizing = true; 
       WindowState = WindowState.Normal; 
       WindowState = WindowState.Maximized; 
       m_isDuringMaximizing = false; 
      } 
     } 
     else if (!m_isDuringMaximizing) 
     { 
      MinWidth = 1024; 
      MinHeight = 768; 
      MaxWidth = 1024; 
      MaxHeight = 768; 
     } 

     base.OnStateChanged(e); 
    } 
+0

Wiem, że pytam o to po 5 latach, ale co to jest "m_isDuringMaximizing"? –

Powiązane problemy