2010-02-01 66 views
5

que necesito para que el siguiente en mi solicitud (aplicación de C# WPF):Habilitar maximizar, minimizar y restaurar la ventana en WPF (cambio de tamaño manual es deshabilitar)

  1. Tiene el tamaño normal de 1024 * 768
  2. El el usuario puede maximizar la aplicación
  3. el usuario puede minimizar la aplicación
  4. el usuario puede restaurar la aplicación (1024 * 768)
  5. el usuario no puede cambiar manualmente el tamaño de la aplicación por draging su frontera.

No hay ningún ResizeMode que cumpla todos estos requisitos. ¿Hay alguna manera de hacer?

+2

Mediante la adición de los properities ventana 'Altura = "1024" width = "768" ResizeMode = "CanMinimize"' que pueda lograr todo menos el punto 2. – ChrisF

+0

¿Puede decirnos por qué quiere arreglar la ventana con un determinado tamaño? Podría ayudarnos a pensar en algunas soluciones. –

+0

Estoy trabajando en un programa médico que presenta una imagen médica. El programa heredado tenía un tamaño fijo de 1024 * 768. Por lo tanto, para los clientes antiguos, debemos preservarlo como una resolución básica. Queremos tener la opción de maximizar la ventana para que podamos verificar el programa bajo ciertos conjuntos de resoluciones sin necesidad de probar la calidad de la imagen presentada en caso de que el usuario cambie el tamaño de la aplicación en tamaño no estándar – Nir

Respuesta

0

Puede escuchar el evento Window.SizeChanged, y dentro de su controlador establecer manualmente Anchura y Altura de nuevo a 1027 y 768. Todavía le permite al usuario arrastrar los bordes de la ventana para cambiar el tamaño, pero luego la ventana vuelve a su configuración tamaño. El inconveniente de esto es que la ventana tiene un "ataque" cada vez que el usuario intenta redimensionar, no es lo más bonito que se puede ver. Minimice y maximice el trabajo de forma normal.

+0

Gracias, Ya lo intenté. El parpadeo ("Confiscación") que encontré (como dijiste) me hizo dejar esta idea al principio. – Nir

5

Finalmente he encontrado una solución relativamente decente.

La idea es anular el evento de la ventana, cancelar las restricciones mín./Máx. Y actualizarlo.

Si la ventana no está maximizada, simplemente aplicamos la espalda las limitaciones 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

Sé que estoy pidiendo esto después de 5 años, pero ¿qué es 'm_isDuringMaximizing' aquí? –

Cuestiones relacionadas