Si establece ResizeMode="CanResizeWithGrip"
un WPF Window
, se muestra un control de cambio de tamaño en la esquina inferior derecha, como se muestra a continuación:
Si también configura WindowStyle="None"
, la barra de título desaparece pero el borde biselado gris permanece hasta que lo configura ResizeMode="NoResize"
. Desafortunadamente, con esta combinación de propiedades establecida, el control de cambio de tamaño también desaparece.
He anulado el Window
de a ControlTemplate
través de un archivo personalizado Style
. Quiero especificar el borde de la ventana yo mismo, y no necesito que los usuarios puedan cambiar el tamaño de la ventana desde los cuatro lados, pero necesito un control de cambio de tamaño.
¿Alguien puede detallar una forma sencilla de cumplir con todos estos criterios?
- No tengo un borde
Window
aparte del que yo mismo especifico en aControlTemplate
. - No tener un control de cambio de tamaño de trabajo en la esquina inferior derecha.
- No tiene barra de título.
fuente
Respuestas:
Si establece la
AllowsTransparency
propiedad enWindow
(incluso sin establecer ningún valor de transparencia), el borde desaparece y solo puede cambiar el tamaño a través del pinzamiento.El resultado se parece a:
fuente
Estaba intentando crear una ventana sin bordes con
WindowStyle="None"
pero cuando la probé, parece que aparece una barra blanca en la parte superior, después de investigar un poco parece ser un "Borde de cambio de tamaño", aquí hay una imagen (comenté en amarillo):Después de investigar un poco en Internet y muchas soluciones difíciles que no son xaml, todas las soluciones que encontré eran código subyacente en C # y muchas líneas de código, encontré indirectamente la solución aquí: La ventana personalizada máxima pierde el efecto de sombra paralela
Nota : Necesita usar .NET 4.5 framework, o si está usando una versión anterior use WPFShell, simplemente haga referencia al shell y use
Shell:WindowChrome.WindowChrome
en su lugar.Usé la
WindowChrome
propiedad de Window, si usas esto, ese "borde de cambio de tamaño" blanco desaparece, pero necesitas definir algunas propiedades para que funcione correctamente.CaptionHeight: esta es la altura del área de subtítulos (barra de encabezado) que permite el ajuste Aero, el comportamiento de doble clic como lo hace una barra de título normal. Establezca esto en 0 (cero) para que los botones funcionen.
ResizeBorderThickness: este es el grosor en el borde de la ventana, que es donde puede cambiar el tamaño de la ventana. Puse 5 porque me gusta ese número, y porque si pones cero es difícil cambiar el tamaño de la ventana.
Después de usar este código corto, el resultado es este:
Y ahora, el borde blanco desapareció sin usar
ResizeMode="NoResize"
yAllowsTransparency="True"
, además, muestra una sombra en la ventana.Más adelante explicaré cómo hacer que funcionen los botones (no usé imágenes para los botones) fácilmente con código simple y corto, soy nuevo y creo que puedo publicar en codeproject, porque aquí no encontré el lugar para publicar el tutorial.
Tal vez haya otra solución (sé que hay soluciones difíciles y difíciles para novatos como yo) pero esto funciona para mis proyectos personales.
Aquí está el código completo
¡Gracias!
fuente
Rectangle_PreviewMouseDown
evento correctamente.Si bien la respuesta aceptada es muy cierta, solo quiero señalar que AllowTransparency tiene algunas desventajas. No permite que aparezcan los controles secundarios de la ventana, es decir, WebBrowser, y normalmente fuerza la representación del software, lo que puede tener efectos negativos en el rendimiento.
Sin embargo, hay una solución mejor.
Cuando desee crear una ventana sin borde que se pueda cambiar de tamaño y sea capaz de alojar un control WebBrowser o un control Frame apuntando a una URL que simplemente no pudo, el contenido de dicho control se mostraría vacío.
Sin embargo, encontré una solución alternativa; en la ventana, si establece WindowStyle en None, ResizeMode en NoResize (tenga paciencia conmigo, aún podrá cambiar el tamaño una vez hecho), luego asegúrese de haber DESCONECTADO AllowsTransparency, tendrá una ventana de tamaño estático sin borde y se mostrará el control del navegador.
Ahora, probablemente todavía quieras poder cambiar el tamaño, ¿verdad? Bueno, podemos hacerlo con una llamada de interoperabilidad:
Y listo, una ventana WPF sin borde y aún móvil y redimensionable sin perder compatibilidad con controles como WebBrowser
fuente
private enum ResizeDirection { Left = 61441, Right = 61442, Top = 61443, TopLeft = 61444, TopRight = 61445, Bottom = 61446, BottomLeft = 61447, BottomRight = 61448, }
Muestra aquí:
fuente
Estaba teniendo dificultades para obtener la respuesta de @ fernando-aguirre usando
WindowChrome
para trabajar. No estaba funcionando en mi caso porque estaba anulandoOnSourceInitialized
en elMainWindow
y no llamando al método de la clase base.Esto me dejó perplejo durante mucho tiempo.
fuente