2012-04-02 60 views
24

Estamos desarrollando una aplicación WPF que utiliza el conjunto de controles de Telerik y todo funciona y se ve bien. Desafortunadamente, hace poco necesitamos reemplazar la clase base de todos nuestros diálogos, cambiando RadWindow por la ventana estándar de WPF (el motivo es irrelevante para esta discusión). Al hacerlo, terminamos teniendo una aplicación que todavía se veía bonita en todas las computadoras de los desarrolladores (Windows 7 con Aero habilitado) pero era fea cuando se usaba en el entorno de nuestro cliente (Servicios de Terminal Server bajo Windows Server 2008 R2).¿Cómo puedo diseñar el borde y la barra de título de una ventana en WPF?

Telerik's RadWindow es un control de usuario estándar que imita el comportamiento de un diálogo, por lo que el diseño no fue un problema. Sin embargo, con Window de WPF, me cuesta mucho cambiar su "frontera". Lo que quiero decir con "borde" aquí es tanto la barra de título con el ícono como los 3 botones estándar (Minimizar, Maximizar/Restaurar, Cerrar) y el control de tamaño alrededor de la ventana.

¿Cómo puedo cambiar el aspecto de estos artículos:

  • Título de barras de color
  • 3 botones estándar de color verdadera frontera
  • de ventana

con esquinas redondas, si es posible.

Respuesta

22

Esas son áreas "no cliente" y están controladas por Windows. Here is the MSDN docs on the subject (la información pertinente está en la parte superior).

Básicamente, configura WindowStyle = "None", luego construye tu propia interfaz de ventana. (similar question on SO)

+0

Sus enlaces fueron lo que he estado buscando pero no encontré. Aparentemente, necesito mejorar mis habilidades de Google ;-) –

+1

@MarcelGosselin Me han dicho que mi google-fu es fuerte :) me alegro de poder ayudar –

+0

Respuesta incorrecta. En primer lugar, RadWindow no es compatible con la propiedad WindowStyle. Y dos, la "pregunta similar" ni siquiera se refiere a los controles de Telerik. – dvallejo

11

Es necesario configurar

WindowStyle="None", AllowTransparency="True", y opcionalmente ResizeMode="NoResize"
a continuación, establezca la propiedad de estilo de la ventana a su estilo de encargo de la ventana, donde se diseña el aspecto de la ventana (barra de título, botones, borde) a cualquier cosa que desee y mostrar los contenidos de la ventana en un ContentPresenter.

This parece ser un buen artículo sobre cómo puede lograr esto, pero hay muchos otros artículos en Internet.

+0

Este [ejemplo de código] (https://code.msdn.microsoft.com/WPF-styling-a-Window-in-fcf4e4ce) proporciona un ejemplo de cómo reemplazar el estilo predeterminado mientras se mantiene toda la funcionalidad predeterminada (barra de título, borde de la ventana, botones de la ventana, arrastrar, soltar y cambiar el tamaño). – JayChase

+0

WindowStyle = "None", AllowsTransparency = "True" (olvidaste la 's' en Allows) – mcissel

+0

¿Por qué sería necesario cambiar el modo de cambio de tamaño? Eso rompe cualquier movimiento de la ventana al usar el teclado (Win + teclas de flecha) o requiere que se agregue. – StingyJack

5

he encontrado una solución más adelante recta desde comentario @DK en this question, la solución está escrito por Alex y described here con la fuente, Para hacer que la ventana personalizada:

  1. descargar el proyecto de ejemplo here
  2. edite el archivo generic.xaml para personalizar el diseño.
  3. enjoy :).
1

Le sugiero que comience desde una solución base y la personalice para que se ajuste a sus necesidades, ¡eso es mejor que empezar desde cero!

Estaba buscando la misma cosa y caigo en this solución de código abierto, espero que ayude.

2

Comprobar el siguiente ejemplo WPF customizing the appearance of a window in XAML

este ejemplo se muestra cómo personalizar completamente el estilo/aparición de una ventana, incluyendo las áreas que no son clientes: barra de título, bordes, máximo, mínimo y los botones de cerrar, mientras que todavía proporciona todos la funcionalidad esperada

+0

Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (// meta.stackexchange.com/a/8259) para que los demás usuarios tengan una idea de lo que es y por qué está allí, luego cita la parte más relevante de la página a la que estás enlazando en caso de que la página objetivo no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) – paper1111

+0

@ paper1111 ¿por qué votar, su comentario no es suficiente? –

+0

No lo rechacé, tal vez alguien de la cola de revisión lo hizo – paper1111

Cuestiones relacionadas