WindowChrome Classe

Définition

Représente un objet qui décrit les personnalisations de la zone non destinée aux clients d’une fenêtre.

public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
    inherit Freezable
Public Class WindowChrome
Inherits Freezable
Héritage

Remarques

La WindowChrome classe vous permet d’étendre Windows Presentation Foundation contenu (WPF) dans la zone non cliente d’une fenêtre généralement réservée au gestionnaire de fenêtres du système d’exploitation.

Standard Windows

Les fenêtres standard sont composées de deux rectangles qui se chevauchent. Le rectangle externe est la zone non cliente, souvent appelée chrome. Il est dessiné et géré par le gestionnaire de fenêtres du système d’exploitation. Ses dimensions sont déterminées par les paramètres du système d’exploitation standard. Le cadre non client fournit des fonctionnalités et des comportements de fenêtre standard. Il s’agit notamment des boutons légende (Réduire, Agrandir et Fermer), la bordure de la fenêtre, les comportements de redimensionnement et de déplacement, l’icône et le titre de l’application et le menu système. Le rectangle interne est la zone cliente. Il contient le contenu de votre application, et il est dessiné et géré par l’application. Pour plus d’informations sur les fenêtres dans les applications WPF, consultez Vue d’ensemble de WPF Windows.

L’illustration suivante montre les parties d’une fenêtre standard.

Éléments de fenêtre

Fenêtres personnalisées

Vous pouvez personnaliser une bordure de fenêtre en définissant la Window.WindowStyle propriété sur None ou en utilisant la WindowChrome classe .

WindowStyle.None

Une façon de personnaliser l’apparence d’une fenêtre d’application WPF consiste à définir la propriété sur Window.WindowStyleNone. Cela supprime le cadre non client de la fenêtre et ne laisse que la zone cliente, à laquelle vous pouvez appliquer un style personnalisé. Toutefois, lorsque le cadre non client est supprimé, vous perdez également les fonctionnalités système et les comportements qu’il fournit, tels que les boutons de légende et le redimensionnement des fenêtres. Un autre effet secondaire est que la fenêtre couvre la barre des tâches Windows lorsqu’elle est agrandie. Le paramètre WindowStyle.None vous permet de créer une application entièrement personnalisée, mais nécessite également d’implémenter une logique personnalisée dans votre application pour émuler le comportement de fenêtre standard.

WindowChrome

Pour personnaliser une fenêtre tout en conservant ses fonctionnalités standard, vous pouvez utiliser la WindowChrome classe . La WindowChrome classe sépare les fonctionnalités du cadre de fenêtre des visuels et vous permet de contrôler la limite entre les zones client et non client de votre fenêtre d’application. La WindowChrome classe vous permet de placer du contenu WPF dans le cadre de la fenêtre en étendant la zone cliente pour couvrir la zone non cliente. En même temps, il conserve les comportements système via deux zones invisibles ; redimensionner les zones de bordure et de légende.

Il existe deux parties main pour créer une fenêtre personnalisée à l’aide de la WindowChrome classe . Tout d’abord, vous personnalisez la partie non cliente de la fenêtre en définissant les propriétés exposées sur l’objet WindowChrome . Ensuite, vous fournissez un modèle pour la fenêtre qui définit la partie de votre application étendue dans la zone non cliente. Les propriétés exposées sur l’objet WindowChrome sont ResizeBorderThickness, CaptionHeight, CornerRadiuset GlassFrameThickness.

La ResizeBorderThickness propriété spécifie une bordure invisible autour de l’extérieur de la fenêtre d’application sur laquelle l’utilisateur peut cliquer et faire glisser pour redimensionner la fenêtre.

La CaptionHeight propriété spécifie une zone invisible en haut de la fenêtre qui active les comportements système généralement associés à la barre de titre. Ces comportements incluent : cliquer et faire glisser pour déplacer la fenêtre, double-cliquer pour agrandir la fenêtre et cliquer avec le bouton droit pour afficher le menu système.

La bordure de redimensionnement et la zone légende n’ont pas d’éléments visuels ; elles définissent uniquement des zones qui répondent aux entrées et activent les comportements de fenêtre fournis par le système standard.

La CornerRadius propriété spécifie la quantité d’arrondis des coins de la fenêtre. Cette propriété n’a aucun effet si le cadre en verre est activé pour une fenêtre.

La GlassFrameThickness propriété spécifie la largeur du cadre en verre autour de la fenêtre. Par défaut, il utilise la valeur système spécifiée par la WindowNonClientFrameThickness propriété pour émuler l’apparence d’une fenêtre standard. Lorsque le cadre en verre est utilisé, les boutons légende pour Réduire, Agrandir et Fermer sont visibles et interactifs. L’application est responsable de l’affichage de l’icône d’application et légende texte. Vous pouvez définir la GlassFrameThickness propriété pour rendre le cadre en verre plus large ou plus étroit que la valeur par défaut.

Attention

La taille des boutons légende ne change pas lorsque la GlassFrameThickness propriété est modifiée. Si la hauteur du dessus du cadre en verre est inférieure à la hauteur des boutons de légende, les boutons légende ne sont pas entièrement visibles.

Pour créer une fenêtre personnalisée qui n’a pas de cadre en verre, définissez la GlassFrameThickness propriété sur une valeur uniforme de 0. Cela désactivera et masquera les boutons de légende standard.

Pour étendre le cadre en verre afin de couvrir la fenêtre entière, définissez la GlassFrameThickness propriété sur une valeur négative de n’importe quel côté. Lorsque la GlassFrameThickness propriété est définie sur une valeur négative pour n’importe quel côté, sa valeur de force est égale à GlassFrameCompleteThickness.

Notes

Aero est un ensemble d’améliorations visuelles apportées à l’apparence et aux fonctionnalités du bureau Windows qui a été introduit dans Windows Vista. L’une des caractéristiques les plus évidentes visuellement d’Aero est les bordures de fenêtres translucides en verre. Windows Aero est activé par la fonctionnalité de composition de bureau du Gestionnaire de fenêtres de bureau (DWM).

Les effets de verre De Windows Aero ne sont pas pris en charge sur tous les systèmes d’exploitation et peuvent être désactivés sur les systèmes d’exploitation pris en charge. Si Windows Aero n’est pas disponible, le cadre en verre n’est pas affiché, quelle que soit la valeur de la GlassFrameThickness propriété. La zone de bordure spécifiée par cette propriété apparaît en noir à la place. Vérifiez la IsGlassEnabled propriété pour vérifier que les effets de verre Windows Aero sont disponibles. Si les effets de verre ne sont pas disponibles, vous devez fournir un autre style de fenêtre qui n’utilise pas le cadre en verre ou utiliser la fenêtre standard en définissant le style de fenêtre sur null.

Vous étendez votre contenu WPF dans le cadre de la fenêtre en spécifiant un ControlTemplate qui définit l’apparence et le comportement du contenu de l’image. Vous définissez le TargetType du ControlTemplate sur le type de la fenêtre que vous personnalisez.

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

Par défaut, les parties des éléments visuels qui se trouvent dans la zone non cliente de la fenêtre ne sont pas interactives. Pour activer des éléments interactifs dans la zone non cliente, attachez la propriété jointe WindowsChrome.IsHitTestVisibleInChrome à l’élément et définissez-le sur true.

Le balisage XAML suivant montre les éléments main nécessaires pour personnaliser une fenêtre à l’aide de la classe 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>  

Le premier setter attache le WindowChrome à la fenêtre. Il utilise toutes les valeurs par défaut pour les propriétés WindowChrome, ce qui donne à la fenêtre un aspect standard.

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

Le modèle de fenêtre doit spécifier un présentateur de contenu pour afficher le contenu de la fenêtre spécifiée dans votre application. Par défaut, la classe WindowChrome étend la zone cliente pour couvrir la bordure non cliente. Pour découvrir le cadre en verre, vous devez spécifier une marge autour du ContentPresenter. Ce balisage spécifie une bordure avec un arrière-plan blanc autour du présentateur de contenu pour émuler l’apparence d’une fenêtre standard. Il spécifie également une marge liée à la propriété WindowNonClientFrameThickness, qui obtient la largeur système par défaut pour le cadre.

<Border Background="White"  
    Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">  
    <ContentPresenter Content="{TemplateBinding Content}" />  
</Border>  

L’icône et le titre de l’application ne sont pas affichés par la classe WindowChrome ; ils doivent être ajoutés à la bordure en tant que contenu personnalisé. Le code XAML suivant ajoute une image et un bloc de texte pour afficher l’icône et le titre. Les deux éléments sont liés aux propriétés correspondantes de la fenêtre. La largeur de l’image est liée à la largeur SmallIconSize, qui obtient la taille système par défaut de l’icône. La propriété jointe IsHitTestVisibleInChrome est définie sur l’image afin qu’elle puisse recevoir des événements de souris.

<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"/>  

Constructeurs

WindowChrome()

Initialise une nouvelle instance de la classe WindowChrome.

Champs

CaptionHeightProperty

Identifie la propriété de dépendance CaptionHeight.

CornerRadiusProperty

Identifie la propriété de dépendance CornerRadius.

GlassFrameThicknessProperty

Identifie la propriété de dépendance GlassFrameThickness.

IsHitTestVisibleInChromeProperty

Identifie la propriété de dépendance IsHitTestVisibleInChrome.

NonClientFrameEdgesProperty

Identifie la propriété de dépendance NonClientFrameEdges.

ResizeBorderThicknessProperty

Identifie la propriété de dépendance ResizeBorderThickness.

ResizeGripDirectionProperty

Identifie la propriété de dépendance ResizeGripDirection.

UseAeroCaptionButtonsProperty

Identifie la propriété de dépendance UseAeroCaptionButtons.

WindowChromeProperty

Identifie la propriété de dépendance WindowChrome.

Propriétés

CanFreeze

Obtient une valeur qui indique si l’objet peut être rendu non modifiable.

(Hérité de Freezable)
CaptionHeight

Obtient ou définit la hauteur de la zone de légende située en haut de la fenêtre.

CornerRadius

Obtient ou définit une valeur qui indique le degré d'arrondi des angles d'une fenêtre.

DependencyObjectType

Obtient le DependencyObjectType qui encapsule le type CLR de cette instance.

(Hérité de DependencyObject)
Dispatcher

Obtient le Dispatcher associé à DispatcherObject.

(Hérité de DispatcherObject)
GlassFrameCompleteThickness

Obtient une épaisseur uniforme de -1.

GlassFrameThickness

Obtient ou définit une valeur qui indique la largeur de la bordure transparente autour d'une fenêtre.

IsFrozen

Obtient une valeur qui indique si l’objet est actuellement modifiable.

(Hérité de Freezable)
IsSealed

Récupère une valeur qui indique si cette instance est actuellement sealed (en lecture seule).

(Hérité de DependencyObject)
NonClientFrameEdges

Obtient ou définit une valeur qui indique quels bords du cadre de la fenêtre ne sont pas détenus par le client.

ResizeBorderThickness

Obtient ou définit une valeur qui indique la largeur de la bordure qui est utilisée pour redimensionner une fenêtre.

UseAeroCaptionButtons

Obtient ou définit une valeur qui indique si le test d'atteinte est activé sur les boutons de légende Aero windows.

Propriétés attachées

IsHitTestVisibleInChrome

Représente un objet qui décrit les personnalisations de la zone non destinée aux clients d’une fenêtre.

ResizeGripDirection

Représente un objet qui décrit les personnalisations de la zone non destinée aux clients d’une fenêtre.

WindowChrome

Obtient ou définit l'instance de WindowChrome joint dans une fenêtre.

Méthodes

CheckAccess()

Détermine si le thread appelant a accès à ce DispatcherObject.

(Hérité de DispatcherObject)
ClearValue(DependencyProperty)

Efface la valeur locale d’une propriété. La propriété à effacer est spécifiée par un identificateur DependencyProperty.

(Hérité de DependencyObject)
ClearValue(DependencyPropertyKey)

Efface la valeur locale d’une propriété en lecture seule. La propriété à effacer est spécifiée par DependencyPropertyKey.

(Hérité de DependencyObject)
Clone()

Crée un clone modifiable de Freezable, en créant des copies complètes des valeurs de l’objet. Lors de la copie des propriétés de dépendance de l’objet, cette méthode copie les expressions (qui peuvent ne plus se résoudre), mais pas les animations ni leurs valeurs actuelles.

(Hérité de Freezable)
CloneCore(Freezable)

Fait de l’instance un clone (copie complète) du Freezable spécifié utilisant des valeurs de propriété (non animée) de base.

(Hérité de Freezable)
CloneCurrentValue()

Crée un clone modifiable (copie complète) de Freezable en utilisant ses valeurs actuelles.

(Hérité de Freezable)
CloneCurrentValueCore(Freezable)

Fait de l’instance un clone (copie complète) modifiable du Freezable spécifié à l’aide des valeurs de propriété actuelles.

(Hérité de Freezable)
CoerceValue(DependencyProperty)

Convertit la valeur de la propriété de dépendance spécifiée. Pour cela, on appelle toute fonction CoerceValueCallback spécifiée dans les métadonnées de propriété pour la propriété de dépendance telle qu’elle existe sur le DependencyObject appelant.

(Hérité de DependencyObject)
CreateInstance()

Initialise une nouvelle instance de la classe Freezable.

(Hérité de Freezable)
CreateInstanceCore()

Crée une instance de la classe WindowChrome.

Equals(Object)

Détermine si un DependencyObject fourni est équivalent au DependencyObject réel.

(Hérité de DependencyObject)
Freeze()

Rend l’objet actif non modifiable et attribue à sa propriété IsFrozen la valeur true.

(Hérité de Freezable)
FreezeCore(Boolean)

Rend l'objet Freezable non modifiable ou vérifie si celui-ci peut être rendu non modifiable ou pas.

(Hérité de Freezable)
GetAsFrozen()

Crée une copie figée de Freezable, à l'aide des valeurs de propriété (non-animées) de base. Étant donné que la copie est figée, tous les sous-objets figés sont copiés par référence.

(Hérité de Freezable)
GetAsFrozenCore(Freezable)

Transforme l’instance en clone figé du Freezable spécifié utilisant des valeurs de propriété (non animée) de base.

(Hérité de Freezable)
GetCurrentValueAsFrozen()

Crée une copie figée de Freezable à l'aide des valeurs de propriété actuelles. Étant donné que la copie est figée, tous les sous-objets figés sont copiés par référence.

(Hérité de Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Convertit l’instance actuelle en un clone figé du Freezable spécifié. Si l’objet a des propriétés de dépendance animées, leurs valeurs animées actuelles sont copiées.

(Hérité de Freezable)
GetHashCode()

Obtient un code de hachage pour ce DependencyObject.

(Hérité de DependencyObject)
GetIsHitTestVisibleInChrome(IInputElement)

Obtient la valeur de la propriété attachée IsHitTestVisibleInChrome à partir de l'élément d'entrée spécifié.

GetLocalValueEnumerator()

Crée un énumérateur spécialisé pour déterminer quelles propriétés de dépendance ont des valeurs définies localement sur ce DependencyObject.

(Hérité de DependencyObject)
GetResizeGripDirection(IInputElement)

Obtient la valeur de la propriété attachée ResizeGripDirection à partir de l'élément d'entrée spécifié.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetValue(DependencyProperty)

Retourne la valeur effective actuelle d’une propriété de dépendance sur cette instance d’un DependencyObject.

(Hérité de DependencyObject)
GetWindowChrome(Window)

Obtient la valeur de la propriété jointe WindowChrome à partir du Window spécifié.

InvalidateProperty(DependencyProperty)

Réévalue la valeur effective de la propriété de dépendance spécifiée.

(Hérité de DependencyObject)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
OnChanged()

Appelé lorsque l’objet Freezable actuel est modifié.

(Hérité de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Garantit que les pointeurs de contexte appropriés sont établis pour un membre de données de type DependencyObjectType qui vient juste d'être défini.

(Hérité de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Ce membre prend en charge l’infrastructure Windows Presentation Foundation (WPF) et n’est pas destiné à être utilisé directement à partir de votre code.

(Hérité de Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Substitue l’implémentation DependencyObject de OnPropertyChanged(DependencyPropertyChangedEventArgs) pour appeler également tous les gestionnaires Changed en réponse à une propriété de dépendance variable de type Freezable.

(Hérité de Freezable)
ReadLocalValue(DependencyProperty)

Retourne la valeur locale d’une propriété de dépendance, si elle existe.

(Hérité de DependencyObject)
ReadPreamble()

Garantit que Freezable est accessible à partir d'un thread valide. Les héritiers de Freezable doivent appeler cette méthode au début de toute API lisant les membres de données qui ne sont pas des propriétés de dépendance.

(Hérité de Freezable)
SetCurrentValue(DependencyProperty, Object)

Définit la valeur d’une propriété de dépendance sans modifier sa valeur source.

(Hérité de DependencyObject)
SetIsHitTestVisibleInChrome(IInputElement, Boolean)

Définit la valeur de la propriété jointe IsHitTestVisibleInChrome sur un élément d'entrée spécifié.

SetResizeGripDirection(IInputElement, ResizeGripDirection)

Définit la valeur de la propriété jointe ResizeGripDirection sur un élément d'entrée spécifié.

SetValue(DependencyProperty, Object)

Définit la valeur locale d’une propriété de dépendance, spécifiée par son identificateur de propriété de dépendance.

(Hérité de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Définit la valeur locale d’une propriété de dépendance en lecture seule, spécifiée par l’identificateur DependencyPropertyKey de la propriété de dépendance.

(Hérité de DependencyObject)
SetWindowChrome(Window, WindowChrome)

Définit la valeur de la propriété jointe WindowChrome du Window spécifié.

ShouldSerializeProperty(DependencyProperty)

Retourne une valeur qui indique si les processus de sérialisation doivent sérialiser la valeur de la propriété de dépendance fournie.

(Hérité de DependencyObject)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
VerifyAccess()

Garantit que le thread appelant a accès à DispatcherObject.

(Hérité de DispatcherObject)
WritePostscript()

Déclenche l’événement Changed pour le Freezable et appelle sa méthode OnChanged(). Les classes qui dérivent de Freezable doivent appeler cette méthode à la fin de toute API qui modifie des membres de classe qui ne sont pas stockés en tant que propriétés de dépendance.

(Hérité de Freezable)
WritePreamble()

Vérifie que le Freezable n'est pas figé et que son accès s'effectue à partir d'un contexte de thread valide. Les héritiers de Freezable doivent appeler cette méthode au début de toute API écrivant dans les membres de données qui ne sont pas des propriétés de dépendance.

(Hérité de Freezable)

Événements

Changed

Se produit lorsque Freezable ou un objet qu'il contient est modifié.

(Hérité de Freezable)

S’applique à