WindowChrome Clase

Definición

Representa un objeto que describe las personalizaciones en el área no 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 de 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 subtí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 las aplicaciones de WPF, vea Información general sobre Windows de WPF.

En la ilustración siguiente se muestran las partes de una ventana estándar.

Elementos Window Elementos Window

Windows personalizado

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 subtítulo botones y cambio de tamaño de ventana. Otro efecto secundario es que la ventana abarcará la barra de tareas de Windows cuando se maximice. La configuración WindowStyle.None 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 permite colocar el contenido de WPF en el marco de ventana extendiendo el área de cliente para cubrir el área que no es de cliente. Al mismo tiempo, conserva los comportamientos del sistema a través de dos áreas invisibles; borde de cambio de tamaño y áreas de subtítulo.

Hay dos partes principales para crear una ventana personalizada mediante la WindowChrome clase . En primer lugar, personaliza 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 al área que no es de 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 normalmente asociados 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 subtí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 de redondeo de las esquinas de la ventana. Esta propiedad no tiene ningún efecto si el marco de cristal está habilitado para una ventana.

La GlassFrameThickness propiedad especifica el ancho del marco de cristal 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 subtítulo para Minimizar, Maximizar y Cerrar son visibles e interactivos. La aplicación es responsable de mostrar el icono de la aplicación y subtítulo texto. Puede establecer la GlassFrameThickness propiedad para que el marco de vidrio sea más ancho o más estrecho que el predeterminado.

Precaución

El tamaño de los botones de subtí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 subtítulo, los botones de subtítulo no serán completamente visibles.

Para crear una ventana personalizada que no tenga un marco de cristal, establezca la GlassFrameThickness propiedad en un valor uniforme de 0. Esto deshabilitará y ocultará los botones estándar subtítulo.

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 translúcidos de ventanas de vidrio. 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 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 cristal 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 no 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

WindowChrome()

Inicializa una nueva instancia de la clase WindowChrome.

Campos

CaptionHeightProperty

Identifica la propiedad de dependencia CaptionHeight.

CornerRadiusProperty

Identifica la propiedad de dependencia CornerRadius.

GlassFrameThicknessProperty

Identifica la propiedad de dependencia GlassFrameThickness.

IsHitTestVisibleInChromeProperty

Identifica la propiedad de dependencia IsHitTestVisibleInChrome.

NonClientFrameEdgesProperty

Identifica la propiedad de dependencia NonClientFrameEdges.

ResizeBorderThicknessProperty

Identifica la propiedad de dependencia ResizeBorderThickness.

ResizeGripDirectionProperty

Identifica la propiedad de dependencia ResizeGripDirection.

UseAeroCaptionButtonsProperty

Identifica la propiedad de dependencia UseAeroCaptionButtons.

WindowChromeProperty

Identifica la propiedad de dependencia WindowChrome.

Propiedades

CanFreeze

Obtiene un valor que indica si el objeto se puede convertir en no modificable.

(Heredado de Freezable)
CaptionHeight

Obtiene o establece el alto del área de un título en la parte superior de una ventana.

CornerRadius

Obtiene o establece un valor que indica la cantidad de esquinas de una ventana que están redondeadas.

DependencyObjectType

Obtiene el DependencyObjectType objeto que encapsula el tipo CLR de esta instancia.

(Heredado de DependencyObject)
Dispatcher

Obtiene el objeto Dispatcher al que está asociado DispatcherObject.

(Heredado de DispatcherObject)
GlassFrameCompleteThickness

Obtiene un grosor uniforme de -1.

GlassFrameThickness

Obtiene o establece un valor que indica el ancho del borde Glass 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 (es de 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 la prueba de posicionamiento está habilitada en los botones de título de Aero de Windows.

Propiedades adjuntas

IsHitTestVisibleInChrome

Representa un objeto que describe las personalizaciones en el área no cliente de una ventana.

ResizeGripDirection

Representa un objeto que describe las personalizaciones en el área no cliente de una ventana.

WindowChrome

Obtiene o establece la instancia de WindowChrome que se asocia a una ventana.

Métodos

CheckAccess()

Determina si el subproceso de la llamada tiene acceso a DispatcherObject.

(Heredado de DispatcherObject)
ClearValue(DependencyProperty)

Borra el valor local de una propiedad. La propiedad que se va a borrar se especifica mediante un identificador DependencyProperty.

(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 un DependencyPropertyKey.

(Heredado de DependencyObject)
Clone()

Crea un clon modificable del elemento Freezable y hace copias en profundidad de los valores del objeto. Cuando se copian las propiedades de dependencia del objeto, este método copia las expresiones (que puede que ya no se resuelvan), pero no copia las animaciones ni sus valores actuales.

(Heredado de Freezable)
CloneCore(Freezable)

Convierte la instancia en un clon (copia en profundidad) de la clase Freezable especificada con valores de propiedad base (no animadas).

(Heredado de Freezable)
CloneCurrentValue()

Crea un clon modificable (copia en profundidad) de Freezable con sus valores actuales.

(Heredado de Freezable)
CloneCurrentValueCore(Freezable)

Convierte esta instancia en un clon modificable (copia en profundidad) del Freezable especificado mediante los valores de propiedad actuales.

(Heredado de Freezable)
CoerceValue(DependencyProperty)

Convierte el valor de la propiedad de dependencia especificada. Esto se logra invocando cualquier función CoerceValueCallback especificada en los metadatos de la propiedad de dependencia tal como existe en la clase DependencyObject que llama.

(Heredado de DependencyObject)
CreateInstance()

Inicializa una nueva instancia de la clase Freezable.

(Heredado de Freezable)
CreateInstanceCore()

Crea una nueva instancia de la clase WindowChrome.

Equals(Object)

Determina si un objeto DependencyObject proporcionado es equivalente al objeto DependencyObject actual.

(Heredado de DependencyObject)
Freeze()

Convierte el objeto actual en no modificable y establece su propiedad IsFrozen en true.

(Heredado de Freezable)
FreezeCore(Boolean)

Convierte el objeto Freezable en no modificable o prueba si se puede convertir en no modificable.

(Heredado de Freezable)
GetAsFrozen()

Crea una copia inmovilizada de Freezable, con los valores de propiedades base (no animadas). Puesto que se inmoviliza la copia, se copia cualquier subobjeto inmovilizado por referencia.

(Heredado de Freezable)
GetAsFrozenCore(Freezable)

Convierte la instancia en un clon inmovilizado de la clase Freezable especificada con los valores de propiedades base (no animadas).

(Heredado de Freezable)
GetCurrentValueAsFrozen()

Crea una copia inmovilizada de Freezable con los valores de propiedad actuales. Puesto que se inmoviliza la copia, se copia cualquier subobjeto inmovilizado por referencia.

(Heredado de Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Convierte la instancia actual en un clon inmovilizado del valor de Freezable especificado. Si el objeto tiene propiedades de dependencia animadas, se copian sus valores animados actuales.

(Heredado de Freezable)
GetHashCode()

Obtiene un código hash de este objeto DependencyObject.

(Heredado de DependencyObject)
GetIsHitTestVisibleInChrome(IInputElement)

Obtiene el valor de la propiedad adjunta IsHitTestVisibleInChrome del elemento de entrada especificado.

GetLocalValueEnumerator()

Crea un enumerador especializado para determinar qué propiedades de dependencia han establecido localmente los valores en DependencyObject.

(Heredado de DependencyObject)
GetResizeGripDirection(IInputElement)

Obtiene el valor de la propiedad adjunta ResizeGripDirection 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 un DependencyObject.

(Heredado de DependencyObject)
GetWindowChrome(Window)

Obtiene el valor de la propiedad adjunta WindowChrome del objeto Window especificado.

InvalidateProperty(DependencyProperty)

Vuelve a evaluar el valor efectivo para la propiedad de dependencia especificada.

(Heredado de DependencyObject)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OnChanged()

Se le llama cuando el objeto Freezable actual se modifica.

(Heredado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Se asegura de que se establecen los punteros contextuales adecuados para un miembro de datos DependencyObjectType que se acaba de establecer.

(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)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Reemplaza la implementación DependencyObject de OnPropertyChanged(DependencyPropertyChangedEventArgs) para invocar también cualquier controlador Changed 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()

Se asegura de que se tiene acceso a Freezable desde un subproceso válido. Los herederos de Freezable deben llamar a este método al inicio de las API que leen miembros de datos que no son propiedades de dependencia.

(Heredado de Freezable)
SetCurrentValue(DependencyProperty, Object)

Establece el valor de una propiedad de dependencia sin cambiar el origen del valor.

(Heredado de DependencyObject)
SetIsHitTestVisibleInChrome(IInputElement, Boolean)

Establece el valor de la propiedad adjunta IsHitTestVisibleInChrome del elemento de entrada especificado.

SetResizeGripDirection(IInputElement, ResizeGripDirection)

Establece el valor de la propiedad adjunta ResizeGripDirection del elemento de entrada especificado.

SetValue(DependencyProperty, Object)

Establece el valor local de una propiedad de dependencia, especificado mediante el identificador de la propiedad de dependencia.

(Heredado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Establece el valor local de una propiedad de dependencia de solo lectura, especificado por el identificador DependencyPropertyKey de la propiedad de dependencia.

(Heredado de DependencyObject)
SetWindowChrome(Window, WindowChrome)

Establece el valor de la propiedad adjunta WindowChrome del objeto Window especificado.

ShouldSerializeProperty(DependencyProperty)

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia especificada.

(Heredado de DependencyObject)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
VerifyAccess()

Exige que el subproceso de la llamada tenga acceso a DispatcherObject.

(Heredado de DispatcherObject)
WritePostscript()

Genera el evento Changed para Freezable e invoca su método OnChanged(). Las clases que derivan de Freezable deben llamar a este método al final de cualquier API que modifique miembros de clase que no estén almacenados como propiedades de dependencia.

(Heredado de Freezable)
WritePreamble()

Comprueba que no se inmovilice Freezable y que se tiene acceso desde un contexto de subproceso válido. Los herederos de Freezable deben llamar a este método al inicio de las API que escriben en miembros de datos que no son propiedades de dependencia.

(Heredado de Freezable)

Eventos

Changed

Se produce cuando se modifican la clase Freezable o un objeto que la contiene.

(Heredado de Freezable)

Se aplica a