WindowChrome Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un objeto que describe las personalizaciones en el área que no es cliente de una ventana.
public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
inherit Freezable
Public Class WindowChrome
Inherits Freezable
- Herencia
Comentarios
La WindowChrome clase permite ampliar el contenido de Windows Presentation Foundation (WPF) en el área que no es cliente de una ventana que normalmente está reservada para el administrador de ventanas del sistema operativo.
Windows estándar
Las ventanas estándar se componen de dos rectángulos superpuestos. El rectángulo externo es el área que no es cliente, que a menudo se conoce como cromo. Se dibuja y administra mediante el administrador de ventanas del sistema operativo. Sus dimensiones están determinadas por la configuración estándar del sistema operativo. El marco que no es de cliente proporciona características y comportamientos de ventana estándar. Estos incluyen botones de título (Minimizar, Maximizar y Cerrar), el borde de la ventana, los comportamientos de cambio de tamaño y movimiento, el icono y el título de la aplicación y el menú del sistema. El rectángulo interno es el área cliente. Contiene el contenido de la aplicación y la dibuja y la administra la aplicación. Para obtener más información sobre las ventanas en aplicaciones wpF, vea Información general sobre Windows de WPF.
En la ilustración siguiente se muestran las partes de una ventana estándar.
Ventanas personalizadas
Puede personalizar un borde de ventana estableciendo la Window.WindowStyle propiedad None en o mediante la WindowChrome clase .
WindowStyle.None
Una manera de personalizar la apariencia de una ventana de aplicación de WPF es establecer la Window.WindowStyle propiedad Noneen . Esto quita el marco que no es de cliente de la ventana y deja solo el área de cliente, a la que puede aplicar un estilo personalizado. Sin embargo, cuando se quita el marco que no es de cliente, también se pierden las características y comportamientos del sistema que proporciona, como botones de título y cambio de tamaño de ventana. Otro efecto secundario es que la ventana cubre la barra de tareas de Windows cuando se maximiza. La configuración WindowStyle.None le permite crear una aplicación completamente personalizada, pero también requiere que implemente lógica personalizada en la aplicación para emular el comportamiento estándar de la ventana.
WindowChrome
Para personalizar una ventana mientras conserva su funcionalidad estándar, puede usar la WindowChrome clase . La WindowChrome clase separa la funcionalidad del marco de ventana de los objetos visuales y permite controlar el límite entre las áreas cliente y no cliente de la ventana de la aplicación. La WindowChrome clase le permite colocar contenido de WPF en el marco de ventana al extender el área de cliente para cubrir el área que no es cliente. Al mismo tiempo, conserva los comportamientos del sistema a través de dos áreas invisibles; las áreas de borde y título de cambio de tamaño.
Hay dos partes principales para crear una ventana personalizada mediante la WindowChrome clase . En primer lugar, puede personalizar la parte que no es cliente de la ventana estableciendo las propiedades expuestas en el WindowChrome objeto . A continuación, proporcione una plantilla para la ventana que define la parte de la aplicación que se extiende en el área que no es cliente. Las propiedades expuestas en el WindowChrome objeto son ResizeBorderThickness, CaptionHeight, CornerRadiusy GlassFrameThickness.
La ResizeBorderThickness propiedad especifica un borde invisible alrededor del exterior de la ventana de la aplicación que el usuario puede hacer clic y arrastrar para cambiar el tamaño de la ventana.
La CaptionHeight propiedad especifica un área invisible en la parte superior de la ventana que permite comportamientos del sistema asociados normalmente a la barra de título. Estos comportamientos incluyen: hacer clic y arrastrar para mover la ventana, hacer doble clic para maximizar la ventana y hacer clic con el botón derecho para mostrar el menú del sistema.
El borde de cambio de tamaño y el área de título no tienen ningún elemento visual; solo definen áreas que responden a la entrada y habilitan los comportamientos de ventana estándar proporcionados por el sistema.
La CornerRadius propiedad especifica la cantidad en la que se redondean las esquinas de la ventana. Esta propiedad no tiene ningún efecto si el marco de vidrio está habilitado para una ventana.
La GlassFrameThickness propiedad especifica el ancho del marco de vidrio alrededor de la ventana. De forma predeterminada, usa el valor del sistema especificado por la WindowNonClientFrameThickness propiedad para emular la apariencia de una ventana estándar. Cuando se usa el marco de vidrio, los botones de título para Minimizar, Maximizar y Cerrar son visibles e interactivos. La aplicación es responsable de mostrar el icono de la aplicación y el texto del título. Puede establecer la GlassFrameThickness propiedad para que el marco de vidrio sea más ancho o más estrecho que el valor predeterminado.
Precaución
El tamaño de los botones de título no cambia cuando se cambia la GlassFrameThickness propiedad. Si el alto de la parte superior del marco de cristal es menor que el alto de los botones de título, los botones de título no serán completamente visibles.
Para crear una ventana personalizada que no tenga un marco de vidrio, establezca la GlassFrameThickness propiedad en un valor uniforme de 0. Esto deshabilitará y ocultará los botones de título estándar.
Para extender el marco de vidrio para cubrir toda la ventana, establezca la GlassFrameThickness propiedad en un valor negativo en cualquier lado. Cuando la GlassFrameThickness propiedad se establece en un valor negativo para cualquier lado, su valor coerced será igual a GlassFrameCompleteThickness.
Nota:
Aero es un conjunto de mejoras visuales para la apariencia y la funcionalidad del escritorio de Windows que se introdujo en Windows Vista. Una de las características más obvias visualmente de Aero es bordes de ventana de vidrio translúcido. Windows Aero está habilitado por la característica de composición de escritorio del Administrador de ventanas de escritorio (DWM).
Los efectos de vidrio Aero de Windows no se admiten en todos los sistemas operativos y se pueden deshabilitar en los sistemas operativos compatibles. Si Windows Aero no está disponible, el marco de vidrio no se mostrará independientemente del valor de la GlassFrameThickness propiedad. En su lugar, el área de borde especificada por esta propiedad aparecerá en negro. Compruebe la IsGlassEnabled propiedad para comprobar que los efectos de vidrio aero de Windows están disponibles. Si los efectos de vidrio no están disponibles, debe proporcionar un estilo de ventana alternativo que no use el marco de vidrio o use la ventana estándar estableciendo el estilo de ventana en NULL.
Para ampliar el contenido de WPF en el marco de ventana, especifique un ControlTemplate que defina la apariencia y el comportamiento del contenido del marco. Establezca targetType de ControlTemplate en el tipo de la ventana que está personalizando.
<ControlTemplate TargetType="{x:Type local:MainWindow}">
De forma predeterminada, las partes de los elementos visuales que están dentro del área que no es cliente de la ventana no son interactivas. Para habilitar elementos interactivos en el área no cliente, adjunte la propiedad adjunta WindowsChrome.IsHitTestVisibleInChrome al elemento y establézcalo en true.
El siguiente marcado XAML muestra los elementos principales necesarios para personalizar una ventana mediante la clase WindowChrome.
<Style x:Key="StandardStyle" TargetType="{x:Type local:MainWindow}">
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MainWindow}">
<Grid>
<Border Background="White"
Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="36,8,0,0"/>
<Image Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(shell:WindowChrome.WindowChrome).ResizeBorderThickness}"
Width="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=SmallIconSize.Width}"
shell:WindowChrome.IsHitTestVisibleInChrome="True"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
El primer establecedor adjunta windowChrome a la ventana. Usa todos los valores predeterminados para las propiedades WindowChrome, lo que hace que la ventana tenga un aspecto similar a una ventana estándar.
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome />
</Setter.Value>
</Setter>
La plantilla de ventana debe especificar un moderador de contenido para mostrar el contenido de la ventana especificada en la aplicación. De forma predeterminada, la clase WindowChrome extiende el área de cliente para cubrir el borde que no es de cliente. Para descubrir el marco de cristal, debe especificar un margen alrededor de ContentPresenter. Este marcado especifica un borde con un fondo blanco alrededor del moderador de contenido para emular la apariencia de una ventana estándar. También especifica un margen enlazado a la propiedad WindowNonClientFrameThickness, que obtiene el ancho predeterminado del sistema para el marco.
<Border Background="White"
Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
La clase WindowChrome no muestra el icono y el título de la aplicación; deben agregarse al borde como contenido personalizado. El código XAML siguiente agrega una imagen y un bloque de texto para mostrar el icono y el título. Ambos elementos están enlazados a las propiedades correspondientes de la ventana. El ancho de la imagen está enlazado al ancho smallIconSize, que obtiene el tamaño predeterminado del sistema para el icono. La propiedad adjunta IsHitTestVisibleInChrome se establece en la imagen para que pueda recibir eventos del mouse.
<Image Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(shell:WindowChrome.WindowChrome).ResizeBorderThickness}"
Width="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=SmallIconSize.Width}"
shell:WindowChrome.IsHitTestVisibleInChrome="True"/>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}"
VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="36,8,0,0"/>
Constructores
| Nombre | Description |
|---|---|
| WindowChrome() |
Inicializa una nueva instancia de la clase WindowChrome. |
Campos
| Nombre | Description |
|---|---|
| CaptionHeightProperty |
Identifica la CaptionHeight propiedad de dependencia. |
| CornerRadiusProperty |
Identifica la CornerRadius propiedad de dependencia. |
| GlassFrameThicknessProperty |
Identifica la GlassFrameThickness propiedad de dependencia. |
| IsHitTestVisibleInChromeProperty |
Identifica la IsHitTestVisibleInChrome propiedad de dependencia. |
| NonClientFrameEdgesProperty |
Identifica la NonClientFrameEdges propiedad de dependencia. |
| ResizeBorderThicknessProperty |
Identifica la ResizeBorderThickness propiedad de dependencia. |
| ResizeGripDirectionProperty |
Identifica la ResizeGripDirection propiedad de dependencia. |
| UseAeroCaptionButtonsProperty |
Identifica la UseAeroCaptionButtons propiedad de dependencia. |
| WindowChromeProperty |
Identifica la WindowChrome propiedad de dependencia. |
Propiedades
| Nombre | Description |
|---|---|
| CanFreeze |
Obtiene un valor que indica si el objeto se puede hacer no modificable. (Heredado de Freezable) |
| CaptionHeight |
Obtiene o establece el alto del área de título en la parte superior de una ventana. |
| CornerRadius |
Obtiene o establece un valor que indica la cantidad en la que se redondean las esquinas de una ventana. |
| DependencyObjectType |
Obtiene el DependencyObjectType objeto que encapsula el tipo CLR de esta instancia. (Heredado de DependencyObject) |
| Dispatcher |
Obtiene el objeto al que DispatcherDispatcherObject está asociado. (Heredado de DispatcherObject) |
| GlassFrameCompleteThickness |
Obtiene un grosor uniforme de -1. |
| GlassFrameThickness |
Obtiene o establece un valor que indica el ancho del borde de vidrio alrededor de una ventana. |
| IsFrozen |
Obtiene un valor que indica si el objeto se puede modificar actualmente. (Heredado de Freezable) |
| IsSealed |
Obtiene un valor que indica si esta instancia está actualmente sellada (solo lectura). (Heredado de DependencyObject) |
| NonClientFrameEdges |
Obtiene o establece un valor que indica qué bordes del marco de ventana no pertenecen al cliente. |
| ResizeBorderThickness |
Obtiene o establece un valor que indica el ancho del borde que se usa para cambiar el tamaño de una ventana. |
| UseAeroCaptionButtons |
Obtiene o establece un valor que indica si las pruebas de posicionamiento están habilitadas en los botones de título aero de Windows. |
Propiedades adjuntas
| Nombre | Description |
|---|---|
| IsHitTestVisibleInChrome |
Representa un objeto que describe las personalizaciones en el área que no es cliente de una ventana. |
| ResizeGripDirection |
Representa un objeto que describe las personalizaciones en el área que no es cliente de una ventana. |
| WindowChrome |
Obtiene o establece la instancia de WindowChrome que está asociada a una ventana. |
Métodos
| Nombre | Description |
|---|---|
| CheckAccess() |
Determina si el subproceso que llama tiene acceso a este DispatcherObject. (Heredado de DispatcherObject) |
| ClearValue(DependencyProperty) |
Borra el valor local de una propiedad. Un identificador especifica DependencyProperty la propiedad que se va a borrar. (Heredado de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Borra el valor local de una propiedad de solo lectura. La propiedad que se va a borrar se especifica mediante .DependencyPropertyKey (Heredado de DependencyObject) |
| Clone() |
Crea un clon modificable de Freezable, haciendo copias profundas de los valores del objeto. Al copiar las propiedades de dependencia del objeto, este método copia expresiones (que podrían dejar de resolverse), pero no animaciones ni sus valores actuales. (Heredado de Freezable) |
| CloneCore(Freezable) |
Convierte la instancia en un clon (copia profunda) del especificado Freezable mediante valores de propiedad base (no animados). (Heredado de Freezable) |
| CloneCurrentValue() |
Crea un clon modificable (copia profunda) del Freezable utilizando sus valores actuales. (Heredado de Freezable) |
| CloneCurrentValueCore(Freezable) |
Convierte la instancia en un clon modificable (copia profunda) del especificado Freezable mediante los valores de propiedad actuales. (Heredado de Freezable) |
| CoerceValue(DependencyProperty) |
Coerce el valor de la propiedad de dependencia especificada. Esto se logra invocando cualquier CoerceValueCallback función especificada en metadatos de propiedad para la propiedad de dependencia tal como existe en la llamada DependencyObjecta . (Heredado de DependencyObject) |
| CreateInstance() |
Inicializa una nueva instancia de la clase Freezable. (Heredado de Freezable) |
| CreateInstanceCore() |
Crea una nueva instancia de la WindowChrome clase . |
| Equals(Object) |
Determina si un proporcionado DependencyObject es equivalente al objeto actual DependencyObject. (Heredado de DependencyObject) |
| Freeze() |
Hace que el objeto actual no se pueda modificar y establezca su IsFrozen propiedad |
| FreezeCore(Boolean) |
Hace que el Freezable objeto no se pueda modificar o compruebe si se puede hacer no modificable. (Heredado de Freezable) |
| GetAsFrozen() |
Crea una copia inmovilizada de , Freezablemediante valores de propiedad base (no animados). Dado que la copia está inmovilizada, los sub-objetos congelados se copian por referencia. (Heredado de Freezable) |
| GetAsFrozenCore(Freezable) |
Convierte la instancia en un clon inmovilizado del especificado Freezable mediante valores de propiedad base (no animados). (Heredado de Freezable) |
| GetCurrentValueAsFrozen() |
Crea una copia inmovilizada de mediante los valores de Freezable propiedad actuales. Dado que la copia está inmovilizada, los sub-objetos congelados se copian por referencia. (Heredado de Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Convierte la instancia actual en un clon inmovilizado del especificado Freezable. Si el objeto tiene propiedades de dependencia animadas, se copian sus valores animados actuales. (Heredado de Freezable) |
| GetHashCode() |
Obtiene un código hash para este DependencyObjectobjeto . (Heredado de DependencyObject) |
| GetIsHitTestVisibleInChrome(IInputElement) |
Obtiene el valor de la IsHitTestVisibleInChrome propiedad adjunta del elemento de entrada especificado. |
| GetLocalValueEnumerator() |
Crea un enumerador especializado para determinar qué propiedades de dependencia tienen valores establecidos localmente en este DependencyObject. (Heredado de DependencyObject) |
| GetResizeGripDirection(IInputElement) |
Obtiene el valor de la ResizeGripDirection propiedad adjunta del elemento de entrada especificado. |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| GetValue(DependencyProperty) |
Devuelve el valor efectivo actual de una propiedad de dependencia en esta instancia de .DependencyObject (Heredado de DependencyObject) |
| GetWindowChrome(Window) |
Obtiene el valor de la WindowChrome propiedad adjunta del especificado Window. |
| InvalidateProperty(DependencyProperty) |
Vuelve a evaluar el valor efectivo de la propiedad de dependencia especificada. (Heredado de DependencyObject) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| OnChanged() |
Se llama cuando se modifica el objeto actual Freezable . (Heredado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Este miembro admite la infraestructura de Windows Presentation Foundation (WPF) y no está pensada para usarse directamente desde el código. (Heredado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Garantiza que los punteros de contexto adecuados se establecen para un DependencyObjectType miembro de datos que se acaba de establecer. (Heredado de Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Invalida la DependencyObject implementación de OnPropertyChanged(DependencyPropertyChangedEventArgs) para invocar también los Changed controladores en respuesta a una propiedad de dependencia cambiante de tipo Freezable. (Heredado de Freezable) |
| ReadLocalValue(DependencyProperty) |
Devuelve el valor local de una propiedad de dependencia, si existe. (Heredado de DependencyObject) |
| ReadPreamble() |
Garantiza que Freezable se accede a desde un subproceso válido. Los heredadores de Freezable deben llamar a este método al principio de cualquier API que lea miembros de datos que no sean propiedades de dependencia. (Heredado de Freezable) |
| SetCurrentValue(DependencyProperty, Object) |
Establece el valor de una propiedad de dependencia sin cambiar su origen de valor. (Heredado de DependencyObject) |
| SetIsHitTestVisibleInChrome(IInputElement, Boolean) |
Establece el valor de la IsHitTestVisibleInChrome propiedad adjunta en el elemento de entrada especificado. |
| SetResizeGripDirection(IInputElement, ResizeGripDirection) |
Establece el valor de la ResizeGripDirection propiedad adjunta en el elemento de entrada especificado. |
| SetValue(DependencyProperty, Object) |
Establece el valor local de una propiedad de dependencia, especificado por su identificador de propiedad de dependencia. (Heredado de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Establece el valor local de una propiedad de dependencia de solo lectura, especificada por el DependencyPropertyKey identificador de la propiedad de dependencia. (Heredado de DependencyObject) |
| SetWindowChrome(Window, WindowChrome) |
Establece el valor de la WindowChrome propiedad adjunta en el especificado Window. |
| ShouldSerializeProperty(DependencyProperty) |
Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia proporcionada. (Heredado de DependencyObject) |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
| VerifyAccess() |
Exige que el subproceso de llamada tenga acceso a este DispatcherObject. (Heredado de DispatcherObject) |
| WritePostscript() |
Genera el Changed evento para e Freezable invoca su OnChanged() método . Las clases que derivan de Freezable deben llamar a este método al final de cualquier API que modifique los miembros de clase que no se almacenan como propiedades de dependencia. (Heredado de Freezable) |
| WritePreamble() |
Comprueba que Freezable no está inmovilizado y que se accede a él desde un contexto de subproceso válido. Freezable Los heredares deben llamar a este método al principio de cualquier API que escriba en miembros de datos que no sean propiedades de dependencia. (Heredado de Freezable) |
Eventos
| Nombre | Description |
|---|---|
| Changed |
Se produce cuando se modifica o Freezable un objeto que contiene. (Heredado de Freezable) |