Compartir a través de


WindowChrome (Clase)

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

Jerarquía de herencia

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.DependencyObject
      System.Windows.Freezable
        Microsoft.Windows.Shell.WindowChrome

Espacio de nombres:  Microsoft.Windows.Shell
Ensamblado:  Microsoft.Windows.Shell (en Microsoft.Windows.Shell.dll)

Sintaxis

'Declaración
Public Class WindowChrome _
    Inherits Freezable
public class WindowChrome : Freezable
public ref class WindowChrome : public Freezable
type WindowChrome =  
    class
        inherit Freezable
    end
public class WindowChrome extends Freezable

El tipo WindowChrome expone los siguientes miembros.

Constructores

  Nombre Descripción
Método público WindowChrome Inicializa una nueva instancia de la clase WindowChrome.

Arriba

Propiedades

  Nombre Descripción
Propiedad pública CanFreeze Obtiene un valor que indica si el objeto se puede convertir en no modificable. (Se hereda de Freezable).
Propiedad pública CaptionHeight Obtiene o establece el alto del área de un título en la parte superior de una ventana.
Propiedad pública CornerRadius Obtiene o establece un valor que indica la cantidad de esquinas de una ventana que están redondeadas.
Propiedad pública DependencyObjectType Obtiene el objeto DependencyObjectType que ajusta el tipo CLR de esta instancia.  (Se hereda de DependencyObject).
Propiedad pública Dispatcher Obtiene el objeto Dispatcher al que está asociado DispatcherObject. (Se hereda de DispatcherObject).
Propiedad públicaMiembro estático GlassFrameCompleteThickness Obtiene un grosor uniforme de -1.
Propiedad pública GlassFrameThickness Obtiene o establece un valor que indica el ancho del borde Glass alrededor de una ventana.
Propiedad pública IsFrozen Obtiene un valor que indica si el objeto es modificable actualmente. (Se hereda de Freezable).
Propiedad pública IsSealed Obtiene un valor que indica si esta instancia está actualmente sellada (es de solo lectura). (Se hereda de DependencyObject).
Propiedad pública NonClientFrameEdges Obtiene o establece un valor que indica qué bordes del marco de ventana no pertenecen al cliente.
Propiedad pública ResizeBorderThickness Obtiene o establece un valor que indica el ancho del borde que se usa para cambiar el tamaño de una ventana.
Propiedad pública 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.

Arriba

Propiedades asociadas

  Nombre Descripción
Propiedad pública asociada IsHitTestVisibleInChrome Obtiene o establece un valor que indica si la prueba de posicionamiento de WPF está habilitada de parte de un elemento situado en el área de no cliente de una ventana.
Propiedad pública asociada ResizeGripDirection Obtiene o establece un valor que indica la dirección del comportamiento del control de ajuste de tamaño en un elemento de entrada.
Propiedad pública asociada WindowChrome Obtiene o establece la instancia de WindowChrome que se asocia a una ventana.

Arriba

Métodos

  Nombre Descripción
Método público CheckAccess Determina si el subproceso de la llamada tiene acceso a DispatcherObject. (Se hereda de DispatcherObject).
Método público ClearValue(DependencyProperty) Borra el valor local de una propiedad.La propiedad que se va a borrar se especifica mediante un identificador de DependencyProperty. (Se hereda de DependencyObject).
Método público ClearValue(DependencyPropertyKey) Borra el valor local de una propiedad de sólo lectura.DependencyPropertyKey especifica la propiedad que se va a borrar. (Se hereda de DependencyObject).
Método público Clone Crea un clon modificable del objeto Freezable y hace copias en profundidad de sus valores.Al copiar las propiedades de dependencia del objeto, este método copia las expresiones (que puede que ya no se resuelvan) pero no las animaciones ni sus valores actuales. (Se hereda de Freezable).
Método protegido CloneCore Convierte la instancia en un clon (copia en profundidad) de la clase Freezable especificada con los valores de la propiedad base (no animada). (Se hereda de Freezable).
Método público CloneCurrentValue Crea un clon modificable (copia en profundidad) de Freezable con sus valores actuales. (Se hereda de Freezable).
Método protegido CloneCurrentValueCore Convierte la instancia en un clon modificable (en profundidad) del objeto Freezable especificado utilizando los valores de las propiedades actuales. (Se hereda de Freezable).
Método público CoerceValue Convierte el valor de la propiedad de dependencia especificada.Esto se logra invocando cualquier función de CoerceValueCallback especificada en los metadatos de la propiedad de dependencia cuando existe en el objeto DependencyObject de llamada. (Se hereda de DependencyObject).
Método protegido CreateInstance Inicializa una nueva instancia de la clase Freezable. (Se hereda de Freezable).
Método protegido CreateInstanceCore Crea una nueva instancia de la clase WindowChrome. (Invalida a Freezable.CreateInstanceCore()).
Método público Equals Determina si un objeto DependencyObject proporcionado es equivalente al objeto DependencyObject actual. (Se hereda de DependencyObject).
Método protegido Finalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método público Freeze Convierte el objeto actual en no modificable y establece su propiedad IsFrozen en true. (Se hereda de Freezable).
Método protegido FreezeCore Convierte el objeto Freezable en no modificable o prueba si se puede convertir en no modificable. (Se hereda de Freezable).
Método público GetAsFrozen Crea una copia inmovilizada de Freezable, con los valores de la propiedad base (no animada).Puesto que se inmoviliza la copia, se copia cualquier subobjeto inmovilizado por referencia. (Se hereda de Freezable).
Método protegido GetAsFrozenCore Convierte la instancia en un clon inmovilizado de la clase Freezable especificada con los valores de la propiedad base (no animada). (Se hereda de Freezable).
Método público 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. (Se hereda de Freezable).
Método protegido GetCurrentValueAsFrozenCore Convierte la instancia actual en un clon inmovilizado de la clase Freezable especificada.Si el objeto tiene propiedades de dependencia animadas, se copian sus valores animados actuales. (Se hereda de Freezable).
Método público GetHashCode Obtiene un código hash de este objeto DependencyObject. (Se hereda de DependencyObject).
Método públicoMiembro estático GetIsHitTestVisibleInChrome Obtiene el valor de la propiedad adjunta IsHitTestVisibleInChrome del elemento de entrada especificado.
Método público GetLocalValueEnumerator Crea un enumerador especializado para determinar qué propiedades de dependencia han establecido localmente los valores en DependencyObject. (Se hereda de DependencyObject).
Método públicoMiembro estático GetResizeGripDirection Obtiene el valor de la propiedad adjunta ResizeGripDirection del elemento de entrada especificado.
Método público GetType Obtiene el objeto Type de la instancia actual. (Se hereda de Object).
Método público GetValue Devuelve el valor efectivo actual de una propiedad de dependencia en esta instancia de DependencyObject. (Se hereda de DependencyObject).
Método públicoMiembro estático GetWindowChrome Obtiene el valor de la propiedad adjunta WindowChrome del objeto Window especificado.
Método público InvalidateProperty Vuelve a evaluar el valor efectivo para la propiedad de dependencia especificada. (Se hereda de DependencyObject).
Método protegido MemberwiseClone Crea una copia superficial del objeto Object actual. (Se hereda de Object).
Método protegido OnChanged Se llama cuando se modifica el objeto Freezable actual. (Se hereda de Freezable).
Método protegido OnFreezablePropertyChanged(DependencyObject, DependencyObject) Se asegura de que se establecen los punteros contextuales adecuados para un miembro de datos DependencyObjectType que se acaba de establecer. (Se hereda de Freezable).
Método protegido OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) Este miembro admite la infraestructura de Windows Presentation Foundation (WPF) y no se debe usar directamente desde el código. (Se hereda de Freezable).
Método protegido OnPropertyChanged Invalida la implementación de DependencyObject de OnPropertyChanged para invocar también cualquier controlador Changed como respuesta a un cambio de propiedad de dependencia de tipo Freezable. (Se hereda de Freezable).
Método público ReadLocalValue Devuelve el valor local de una propiedad de dependencia, si existe. (Se hereda de DependencyObject).
Método protegido 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 lean miembros de datos que no son propiedades de dependencia. (Se hereda de Freezable).
Método públicoMiembro estático SetIsHitTestVisibleInChrome Establece el valor de la propiedad adjunta IsHitTestVisibleInChrome del elemento de entrada especificado.
Método públicoMiembro estático SetResizeGripDirection Establece el valor de la propiedad adjunta ResizeGripDirection del elemento de entrada especificado.
Método público SetValue(DependencyProperty, Object) Establece el valor local de una propiedad de dependencia, especificado por su identificador de propiedad de dependencia. (Se hereda de DependencyObject).
Método público SetValue(DependencyPropertyKey, Object) Establece el valor local de una propiedad de dependencia de sólo lectura, especificado por el identificador DependencyPropertyKey de la propiedad de dependencia. (Se hereda de DependencyObject).
Método públicoMiembro estático SetWindowChrome Establece el valor de la propiedad adjunta WindowChrome del objeto Window especificado.
Método protegido ShouldSerializeProperty Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia proporcionada. (Se hereda de DependencyObject).
Método público ToString Devuelve una cadena que representa el objeto actual. (Se hereda de Object).
Método público VerifyAccess Exige que el subproceso de la llamada tenga acceso a DispatcherObject. (Se hereda de DispatcherObject).
Método protegido WritePostscript Provoca el evento Changed de Freezable e invoca su método OnChanged.Las clases que se derivan de Freezable deben llamar a este método al final de cualquier API que modifique miembros de clase que no se almacenen como propiedades de dependencia. (Se hereda de Freezable).
Método protegido 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 cualquier API que escriba en miembros de datos que no sean propiedades de dependencia. (Se hereda de Freezable).

Arriba

Eventos

  Nombre Descripción
Evento público Changed Se produce cuando se modifican la clase Freezable o un objeto que la contiene. (Se hereda de Freezable).

Arriba

Campos

  Nombre Descripción
Campo públicoMiembro estático CaptionHeightProperty Identifica la propiedad de dependencia CaptionHeight.
Campo públicoMiembro estático CornerRadiusProperty Identifica la propiedad de dependencia CornerRadius.
Campo públicoMiembro estático GlassFrameThicknessProperty Identifica la propiedad de dependencia GlassFrameThickness.
Campo públicoMiembro estático IsHitTestVisibleInChromeProperty Identifica la propiedad de dependencia IsHitTestVisibleInChrome.
Campo públicoMiembro estático NonClientFrameEdgesProperty Identifica la propiedad de dependencia NonClientFrameEdges.
Campo públicoMiembro estático ResizeBorderThicknessProperty Identifica la propiedad de dependencia ResizeBorderThickness.
Campo públicoMiembro estático ResizeGripDirectionProperty Identifica la propiedad de dependencia ResizeGripDirection.
Campo públicoMiembro estático UseAeroCaptionButtonsProperty Identifica la propiedad de dependencia UseAeroCaptionButtons.
Campo públicoMiembro estático WindowChromeProperty Identifica la propiedad de dependencia WindowChrome.

Arriba

Comentarios

La clase WindowChrome permite extender contenido de Windows Presentation Foundation (WPF) al área no cliente de una ventana normalmente reservada para el administrador de ventanas del sistema operativo.

Ventanas estándar

Las ventanas estándar se componen de dos rectángulos superpuestos. El rectángulo exterior es el área no cliente a la que se suele hacer referencia como cromo. Lo dibuja y administra el administrador de ventanas del sistema operativo. Sus dimensiones están determinadas por la configuración estándar del sistema operativo. El marco de no cliente proporciona características y comportamientos de ventana estándar. Entre ellos se incluyen los 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 título de la aplicación, y el menú del sistema. El rectángulo interior es el área cliente. Incluye el contenido de la aplicación, y esta lo dibuja y administra. Para obtener más información sobre Windows en aplicaciones para WPF, vea Información general sobre ventanas de WPF.

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

Elementos de ventana

Ventanas personalizadas

Puede personalizar un borde de ventana estableciendo la propiedad Window.WindowStyle en None o utilizando la clase WindowChrome.

WindowStyle.None

Una forma de personalizar el aspecto de una ventana de la aplicación WPF es establecer la propiedad Window.WindowStyle en None. Esto quita el marco de no cliente de la ventana y deja solamente el área cliente, en la que se puede aplicar un estilo personalizado. Sin embargo, cuando se quita el marco no cliente, también se pierden las características y los comportamientos del sistema que proporciona, como los botones de leyenda y el cambio el tamaño de la ventana. Otro efecto secundario es que la ventana cubrirá la barra de tareas de Windows al maximizarla. El establecimiento de WindowStyle.None permite crear una aplicación totalmente personalizada, pero también requiere la implementación de una lógica personalizada a la aplicación para emular el comportamiento estándar de la ventana.

WindowChrome

Para personalizar una ventana sin que pierda su funcionalidad estándar, puede usar la clase WindowChrome. La clase WindowChrome separa la funcionalidad del marco de ventana de las representaciones visuales y permite controlar el límite entre las áreas cliente y no cliente de la ventana de la aplicación. La clase WindowChrome permite incluir contenido de WPF en el marco de la ventana extendiendo el área cliente para que cubra el área no cliente. Al mismo tiempo, mantiene los comportamientos del sistema a través de dos áreas invisibles: el área de borde de cambio de tamaño y de título.

Hay dos partes principales para crear una ventana personalizada mediante la clase WindowChrome. En primer lugar, personalice la parte no cliente de la ventana estableciendo las propiedades expuestas en el objeto WindowChrome. A continuación, se proporciona una plantilla para la ventana que define la parte de la aplicación que se extiende al área no cliente. Las propiedades expuestas en el objeto WindowChrome son ResizeBorderThickness, CaptionHeight, CornerRadius y GlassFrameThickness.

La propiedad ResizeBorderThickness especifica un borde invisible alrededor del contorno de la ventana de la aplicación donde el usuario puede hacer clic y arrastrar para cambiar el tamaño de la ventana.

La propiedad CaptionHeight especifica un área invisible en la parte superior de la ventana que habilita los comportamientos del sistema normalmente asociados a la barra de título. Entre estos comportamientos se incluye: hacer clic y arrastrar para mover la ventana, hacer doble clic para maximizar la ventana, y hacer clic con el botón secundario 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 entradas y habilitan comportamientos de ventana estándar proporcionados por el sistema.

La propiedad CornerRadius especifica cuánto se redondean las esquinas de la ventana. Esta propiedad no tiene ningún efecto si el marco Glass está habilitado para una ventana.

La propiedad GlassFrameThickness especifica el ancho del marco Glass alrededor de la ventana. De forma predeterminada, utiliza el valor del sistema especificado por la propiedad WindowNonClientFrameThickness para emular el aspecto de una ventana estándar. Cuando se utiliza el marco Glass, los botones de título para Minimizar, Maximizan y Cerrar están visibles e interactivos. La aplicación es responsable de mostrar el icono de aplicación y el texto de la leyenda. Puede establecer la propiedad GlassFrameThickness para hacer que el marco Glass sea más ancho o más estrecho que el valor predeterminado.

Nota de precauciónPrecaución

El tamaño de los botones de título no se modifica al cambiar la propiedad GlassFrameThickness.Si el alto de la parte superior del marco Glass es inferior al alto de los botones de título, estos botones no serán totalmente visibles.

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

Para extender el marco Glass de forma que cubra la ventana completa, establezca la propiedad GlassFrameThickness en un valor negativo en cualquier lado. Cuando la propiedad GlassFrameThickness está establecida en un valor negativo en algún lado, su valor convertido será igual a GlassFrameCompleteThickness.

NotaNota

Aero es un conjunto de mejoras visuales de la apariencia y funcionalidad del escritorio de Windows que se introdujo en Windows vista.Una de las características visualmente más obvias de Aero son los bordes de ventana de cristal translúcido.La característica de composición de escritorio del Administrador de ventanas de escritorio (DWM) habilita Windows Aero.

Los efectos Glass de Windows Aero no se admiten en todos los sistemas operativos, y pueden deshabilitarse en los sistemas operativos compatibles. Si Windows Aero no está disponible, el marco Glass no se mostrará, independientemente del valor de propiedad GlassFrameThickness. El área del borde especificada por esta propiedad aparecerá en negro en su lugar. Compruebe la propiedad IsGlassEnabled para asegurarse de que los efectos Glass de Windows Aero están disponibles. Si los efectos Glass no están disponibles, debe proporcionar un estilo de ventana alternativa que no utilice el marco Glass ni la ventana estándar estableciendo el estilo de ventana en null.

Puede ampliar su contenido de WPF al marco de la ventana; para ello, especifique un elemento ControlTemplate que defina la apariencia y el comportamiento del contenido del marco. Establezca el elemento TargetType de ControlTemplate en el tipo de la ventana que está personalizando.

<ControlTemplate TargetType="{x:Type local:MainWindow}">

De forma predeterminada, las partes de todo elemento visual dentro del área no cliente de la ventana no son interactivas. Para habilitar los elementos interactivos en el área no cliente, asocie la propiedad WindowsChrome.IsHitTestVisibleInChrome adjunta al elemento y establézcala en true.

El siguiente marcado XAML muestra los elementos principales necesarios para personalizar una ventana utilizando 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 método Set adjunta el objeto WindowChrome a la ventana. Usa todos los valores predeterminados para las propiedades WindowChrome, lo que hace que la ventana se asemeje a una ventana estándar.

<Setter Property="shell:WindowChrome.WindowChrome">
    <Setter.Value>
        <shell:WindowChrome />
    </Setter.Value>
</Setter>

La plantilla de ventana debe especificar un presentador de contenido para mostrar el contenido de la ventana especificada en la aplicación. De manera predeterminada, la clase WindowChrome extiende el área cliente para cubrir el borde no cliente. Para descubrir el marco Glass, debe especificar un margen alrededor de ContentPresenter. Este marcado especifica un borde con un fondo blanco alrededor del presentador de contenido para emular el aspecto 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 título y el icono de la aplicación; estos deben agregarse al borde como contenido personalizado. El XAML siguiente agrega una imagen y un bloque de texto para mostrar el icono y el título. Ambos elementos se enlazan a las propiedades correspondientes de la ventana. El ancho de la imagen se enlaza al ancho de SmallIconSize, que obtiene el tamaño predeterminado del sistema para el icono. La propiedad IsHitTestVisibleInChrome adjunta se establece en la imagen para que pueda recibir eventos de 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"/>

Seguridad para subprocesos

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Vea también

Referencia

Microsoft.Windows.Shell (Espacio de nombres)