WindowChrome Classe

Definizione

Rappresenta un oggetto che descrive le personalizzazioni all'area non client di una finestra.

public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
    inherit Freezable
Public Class WindowChrome
Inherits Freezable
Ereditarietà

Commenti

La WindowChrome classe consente di estendere il contenuto Windows Presentation Foundation (WPF) nell'area non client di una finestra in genere riservata al gestore finestre del sistema operativo.

Standard Windows

Le finestre standard sono costituite da due rettangoli sovrapposti. Il rettangolo esterno è l'area non client, spesso definita chrome. Viene disegnato e gestito dal gestore finestre del sistema operativo. Le dimensioni sono determinate dalle impostazioni del sistema operativo standard. Il frame non client fornisce funzionalità e comportamenti standard della finestra. Questi includono didascalia pulsanti (Riduci a icona, Ingrandisci e Chiudi), il bordo della finestra, ridimensionare e spostare i comportamenti, l'icona e il titolo dell'applicazione e il menu di sistema. Il rettangolo interno è l'area client. Contiene il contenuto dell'applicazione e viene disegnato e gestito dall'applicazione. Per altre informazioni sulle finestre nelle applicazioni WPF, vedere Cenni preliminari su Windows WPF.

La figura seguente mostra le parti di una finestra standard.

Elementi finestra Elementi Window

Windows personalizzato

È possibile personalizzare un bordo finestra impostando la Window.WindowStyle proprietà su None o usando la WindowChrome classe .

WindowStyle.Nessuno

Un modo per personalizzare l'aspetto di una finestra dell'applicazione WPF consiste nel impostare la Window.WindowStyle proprietà su None. Ciò rimuove il frame non client dalla finestra e lascia solo l'area client, a cui è possibile applicare uno stile personalizzato. Tuttavia, quando il frame non client viene rimosso, si perdono anche le funzionalità e i comportamenti del sistema forniti, ad esempio i pulsanti di didascalia e il ridimensionamento delle finestre. Un altro effetto collaterale è che la finestra coprirà la barra delle applicazioni di Windows quando è ingrandita. L'impostazione WindowStyle.None consente di creare un'applicazione completamente personalizzata, ma richiede anche di implementare la logica personalizzata nell'applicazione per emulare il comportamento della finestra standard.

WindowChrome

Per personalizzare una finestra mantenendo la funzionalità standard, è possibile usare la WindowChrome classe . La WindowChrome classe separa la funzionalità della cornice di finestra dagli oggetti visivi e consente di controllare il limite tra il client e le aree non client della finestra dell'applicazione. La WindowChrome classe consente di inserire contenuto WPF nella cornice della finestra estendendo l'area client per coprire l'area non client. Allo stesso tempo, mantiene i comportamenti del sistema attraverso due aree invisibili; il bordo di ridimensionamento e le aree didascalia.

Esistono due parti principali per creare una finestra personalizzata usando la WindowChrome classe . Prima di tutto, si personalizza la parte non client della finestra impostando le proprietà esposte nell'oggetto WindowChrome . Specificare quindi un modello per la finestra che definisce la parte dell'applicazione estesa nell'area non client. Le proprietà esposte nell'oggetto WindowChrome sono ResizeBorderThickness, , CaptionHeightCornerRadiuse GlassFrameThickness.

La ResizeBorderThickness proprietà specifica un bordo invisibile intorno all'esterno della finestra dell'applicazione che l'utente può fare clic e trascinare per ridimensionare la finestra.

La CaptionHeight proprietà specifica un'area invisibile nella parte superiore della finestra che consente comportamenti di sistema in genere associati alla barra del titolo. Questi comportamenti includono: fare clic e trascinare per spostare la finestra, fare doppio clic per ottimizzare la finestra e fare clic con il pulsante destro del mouse per visualizzare il menu di sistema.

Il bordo di ridimensionamento e l'area didascalia non hanno elementi visivi, ma definiscono solo le aree che rispondono all'input e abilitano i comportamenti delle finestre fornite dal sistema standard.

La CornerRadius proprietà specifica la quantità che gli angoli della finestra vengono arrotondati. Questa proprietà non ha alcun effetto se la cornice di vetro è abilitata per una finestra.

La GlassFrameThickness proprietà specifica la larghezza della cornice di vetro intorno alla finestra. Per impostazione predefinita, usa il valore di sistema specificato dalla WindowNonClientFrameThickness proprietà per emulare l'aspetto di una finestra standard. Quando viene usata la cornice di vetro, i pulsanti di didascalia per Ridurre, Ottimizzare e Chiudi sono visibili e interattivi. L'applicazione è responsabile della visualizzazione dell'icona dell'applicazione e del testo didascalia. È possibile impostare la GlassFrameThickness proprietà per rendere la cornice di vetro più ampia o più stretta rispetto al valore predefinito.

Attenzione

Le dimensioni dei pulsanti didascalia non cambiano quando la GlassFrameThickness proprietà viene modificata. Se l'altezza della parte superiore della cornice di vetro è minore dell'altezza dei pulsanti didascalia, i pulsanti didascalia non saranno completamente visibili.

Per creare una finestra personalizzata che non ha una cornice di vetro, impostare la GlassFrameThickness proprietà su un valore uniforme pari a 0. In questo modo verranno disabilitati e nascosti i pulsanti di didascalia standard.

Per estendere la cornice di vetro per coprire l'intera finestra, impostare la GlassFrameThickness proprietà su un valore negativo su qualsiasi lato. Quando la GlassFrameThickness proprietà è impostata su un valore negativo per qualsiasi lato, il relativo valore coerced sarà uguale a GlassFrameCompleteThickness.

Nota

Aero è un set di miglioramenti visivi per l'aspetto e la funzionalità del desktop Windows introdotto in Windows Vista. Una delle caratteristiche più visivamente evidenti di Aero è bordi di finestra di vetro traslucente. Windows Aero è abilitato dalla funzionalità di composizione desktop di Desktop Window Manager (DWM).

Gli effetti di windows Aero glass non sono supportati in tutti i sistemi operativi e possono essere disabilitati nei sistemi operativi supportati. Se Windows Aero non è disponibile, la cornice di vetro non verrà visualizzata indipendentemente dal valore della GlassFrameThickness proprietà. L'area del bordo specificata da questa proprietà verrà invece visualizzata in nero. Controllare la IsGlassEnabled proprietà per verificare che siano disponibili gli effetti di vetro di Windows Aero. Se gli effetti di vetro non sono disponibili, è necessario fornire uno stile di finestra alternativo che non usa la cornice di vetro o usare la finestra standard impostando lo stile della finestra su Null.

Si estende il contenuto WPF nella cornice della finestra specificando un ControlloTemplate che definisce l'aspetto e il comportamento del contenuto del frame. Impostare TargetType del ControlloTemplate sul tipo della finestra che si sta personalizzando.

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

Per impostazione predefinita, le parti di qualsiasi elemento visivo all'interno dell'area non client della finestra non sono interattive. Per abilitare gli elementi interattivi nell'area non client, collegare la proprietà associata WindowsChrome.IsHitTestVisibleInChrome all'elemento e impostarla su true.

Il markup XAML seguente mostra gli elementi principali necessari per personalizzare una finestra usando 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>  

Il primo setter collega WindowChrome alla finestra. Usa tutti i valori predefiniti per le proprietà WindowChrome, che rendono la finestra simile a una finestra standard.

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

Il modello di finestra deve specificare un relatore del contenuto per visualizzare il contenuto della finestra specificata nell'applicazione. Per impostazione predefinita, la classe WindowChrome estende l'area client per coprire il bordo non client. Per individuare la cornice di vetro, è necessario specificare un margine intorno a ContentPresenter. Questo markup specifica un bordo con sfondo bianco intorno al relatore del contenuto per emulare l'aspetto di una finestra standard. Specifica anche un margine associato alla proprietà WindowNonClientFrameThickness, che ottiene la larghezza di sistema predefinita per il frame.

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

L'icona dell'applicazione e il titolo non vengono visualizzati dalla classe WindowChrome; devono essere aggiunti al bordo come contenuto personalizzato. Il codice XAML seguente aggiunge un'immagine e un blocco di testo per visualizzare l'icona e il titolo. Entrambi gli elementi sono associati alle proprietà corrispondenti nella finestra. La larghezza dell'immagine è associata alla larghezza SmallIconSize, che ottiene le dimensioni predefinite del sistema per l'icona. La proprietà associata IsHitTestVisibleInChrome è impostata sull'immagine in modo che possa ricevere eventi 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"/>  

Costruttori

WindowChrome()

Inizializza una nuova istanza della classe WindowChrome.

Campi

CaptionHeightProperty

Identifica la proprietà di dipendenza CaptionHeight.

CornerRadiusProperty

Identifica la proprietà di dipendenza CornerRadius.

GlassFrameThicknessProperty

Identifica la proprietà di dipendenza GlassFrameThickness.

IsHitTestVisibleInChromeProperty

Identifica la proprietà di dipendenza IsHitTestVisibleInChrome.

NonClientFrameEdgesProperty

Identifica la proprietà di dipendenza NonClientFrameEdges.

ResizeBorderThicknessProperty

Identifica la proprietà di dipendenza ResizeBorderThickness.

ResizeGripDirectionProperty

Identifica la proprietà di dipendenza ResizeGripDirection.

UseAeroCaptionButtonsProperty

Identifica la proprietà di dipendenza UseAeroCaptionButtons.

WindowChromeProperty

Identifica la proprietà di dipendenza WindowChrome.

Proprietà

CanFreeze

Ottiene un valore che indica se l'oggetto può essere impostato come non modificabile.

(Ereditato da Freezable)
CaptionHeight

Ottiene o imposta l'altezza dell'area della didascalia nella parte superiore della finestra.

CornerRadius

Ottiene o imposta un valore che indica quanto vengono arrotondati gli angoli di una finestra.

DependencyObjectType

Ottiene l'oggetto DependencyObjectType che esegue il wrapping del tipo CLR di questa istanza.

(Ereditato da DependencyObject)
Dispatcher

Ottiene l'oggetto Dispatcher associato a DispatcherObject.

(Ereditato da DispatcherObject)
GlassFrameCompleteThickness

Ottiene uno spessore uniforme pari a -1.

GlassFrameThickness

Ottiene o imposta un valore che indica la larghezza del bordo effetto cristallo intorno a una finestra.

IsFrozen

Ottiene un valore che indica se l'oggetto è attualmente modificabile.

(Ereditato da Freezable)
IsSealed

Ottiene un valore che indica se l'istanza è attualmente sealed (di sola lettura).

(Ereditato da DependencyObject)
NonClientFrameEdges

Ottiene o imposta un valore che indica quali bordi della cornice della finestra non sono di proprietà del client.

ResizeBorderThickness

Ottiene o imposta un valore che indica la larghezza del bordo usata per ridimensionare una finestra.

UseAeroCaptionButtons

Ottiene o imposta un valore che indica se hit testing è abilitato sui pulsanti della barra del titolo Windows Aero.

Proprietà associate

IsHitTestVisibleInChrome

Rappresenta un oggetto che descrive le personalizzazioni all'area non client di una finestra.

ResizeGripDirection

Rappresenta un oggetto che descrive le personalizzazioni all'area non client di una finestra.

WindowChrome

Ottiene o imposta l'istanza di WindowChrome che è collegato a una finestra.

Metodi

CheckAccess()

Determina se il thread chiamante ha accesso a DispatcherObject.

(Ereditato da DispatcherObject)
ClearValue(DependencyProperty)

Cancella il valore locale di una proprietà. La proprietà da cancellare è specificata da un identificatore DependencyProperty.

(Ereditato da DependencyObject)
ClearValue(DependencyPropertyKey)

Cancella il valore locale di una proprietà di sola lettura. La proprietà da cancellare è specificata da un oggetto DependencyPropertyKey.

(Ereditato da DependencyObject)
Clone()

Crea un clone modificabile dell'oggetto Freezable, eseguendo copie complete dei valori dell'oggetto. Durante la copia delle proprietà di dipendenza di questo oggetto, questo metodo copia le espressioni (che potrebbero non essere più risolte), ma non le animazioni né i relativi valori correnti.

(Ereditato da Freezable)
CloneCore(Freezable)

Rende l'istanza un clone (copia completa) dell'oggetto Freezable specificato usando i valori di proprietà di base (non animati).

(Ereditato da Freezable)
CloneCurrentValue()

Crea un clone modificabile (copia completa) di Freezable utilizzando i valori correnti.

(Ereditato da Freezable)
CloneCurrentValueCore(Freezable)

Rende l'istanza un clone (copia completa) modificabile dell'oggetto Freezable specificato usando i valori di proprietà correnti.

(Ereditato da Freezable)
CoerceValue(DependencyProperty)

Assegna forzatamente il valore della proprietà di dipendenza specificata. Questa operazione viene eseguita richiamando qualsiasi funzione CoerceValueCallback specificata nei metadati della proprietà di dipendenza esistente nell'oggetto DependencyObject chiamante.

(Ereditato da DependencyObject)
CreateInstance()

Inizializza una nuova istanza della classe Freezable.

(Ereditato da Freezable)
CreateInstanceCore()

Crea una nuova istanza della classe WindowChrome.

Equals(Object)

Determina se l'oggetto DependencyObject specificato equivale all'oggetto DependencyObject corrente.

(Ereditato da DependencyObject)
Freeze()

Rende non modificabile l'oggetto corrente e ne imposta la proprietà IsFrozen su true.

(Ereditato da Freezable)
FreezeCore(Boolean)

Rende immodificabile l'oggetto Freezable o verifica se può essere reso immodificabile.

(Ereditato da Freezable)
GetAsFrozen()

Crea una copia bloccata di Freezable, utilizzando valori delle proprietà di base (non-animati). Dato che la copia è bloccata, gli oggetti secondari bloccati sono copiati dal riferimento.

(Ereditato da Freezable)
GetAsFrozenCore(Freezable)

Rende l'istanza un clone bloccato dell'oggetto Freezable specificato usando i valori di proprietà di base (non animati).

(Ereditato da Freezable)
GetCurrentValueAsFrozen()

Crea una copia bloccata di Freezable utilizzando valori della proprietà correnti. Dato che la copia è bloccata, gli oggetti secondari bloccati sono copiati dal riferimento.

(Ereditato da Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Rende l'istanza corrente un clone bloccato dell'oggetto Freezable specificato. Se l'oggetto ha proprietà di dipendenza animate, i valori animati correnti vengono copiati.

(Ereditato da Freezable)
GetHashCode()

Ottiene un codice hash per l'oggetto DependencyObject.

(Ereditato da DependencyObject)
GetIsHitTestVisibleInChrome(IInputElement)

Ottiene il valore della proprietà associata IsHitTestVisibleInChrome dall'elemento di input specificato.

GetLocalValueEnumerator()

Crea un enumeratore specializzato per determinare le proprietà di dipendenza che presentano valori impostati localmente nell'oggetto DependencyObject.

(Ereditato da DependencyObject)
GetResizeGripDirection(IInputElement)

Ottiene il valore della proprietà associata ResizeGripDirection dall'elemento di input specificato.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza in questa istanza di DependencyObject.

(Ereditato da DependencyObject)
GetWindowChrome(Window)

Ottiene il valore della proprietà associata WindowChrome dall'oggetto Window specificato.

InvalidateProperty(DependencyProperty)

Valuta di nuovo il valore effettivo della proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnChanged()

Chiamato quando viene modificato l'oggetto Freezable corrente.

(Ereditato da Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Assicura che adatti puntatori del contesto siano stabiliti per un membro dati DependencyObjectType che è appena stato impostato.

(Ereditato da Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Questo membro supporta l'infrastruttura Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice.

(Ereditato da Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Esegue l'override dell'implementazione di DependencyObject di OnPropertyChanged(DependencyPropertyChangedEventArgs) per richiamare anche eventuali gestori Changed in risposta alla modifica di una proprietà di dipendenza di tipo Freezable.

(Ereditato da Freezable)
ReadLocalValue(DependencyProperty)

Restituisce il valore locale di una proprietà di dipendenza, se esistente.

(Ereditato da DependencyObject)
ReadPreamble()

Assicura che l’accesso di Freezable sia stato eseguito da un thread valido. Gli eredi di Freezable devono chiamare questo metodo all'inizio di qualsiasi API che legge i membri dei dati che non sono proprietà della dipendenza.

(Ereditato da Freezable)
SetCurrentValue(DependencyProperty, Object)

Imposta il valore di una proprietà di dipendenza senza modificare l'origine del valore.

(Ereditato da DependencyObject)
SetIsHitTestVisibleInChrome(IInputElement, Boolean)

Imposta il valore della proprietà associata IsHitTestVisibleInChrome sull'elemento di input specificato.

SetResizeGripDirection(IInputElement, ResizeGripDirection)

Imposta il valore della proprietà associata ResizeGripDirection sull'elemento di input specificato.

SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza, specificato dal relativo identificatore della proprietà di dipendenza.

(Ereditato da DependencyObject)
SetValue(DependencyPropertyKey, Object)

Imposta il valore locale di una proprietà di dipendenza di sola lettura, specificato dall'identificatore DependencyPropertyKey della proprietà di dipendenza.

(Ereditato da DependencyObject)
SetWindowChrome(Window, WindowChrome)

Imposta il valore della proprietà associata WindowChrome sull'oggetto Window specificato.

ShouldSerializeProperty(DependencyProperty)

Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
VerifyAccess()

Impone che il thread chiamante abbia accesso a DispatcherObject.

(Ereditato da DispatcherObject)
WritePostscript()

Genera l'evento Changed per Freezable e richiama il metodo OnChanged(). Le classi che derivano da Freezable devono chiamare questo metodo alla fine di qualsiasi API che modifica i membri di classe che non sono archiviati come proprietà di dipendenza.

(Ereditato da Freezable)
WritePreamble()

Verifica che l'oggetto Freezable non sia bloccato e che l'accesso sia eseguito da un contesto di threading valido. Gli eredi di Freezable devono chiamare questo metodo all'inizio di qualsiasi API che scrive sui membri dei dati che non sono proprietà della dipendenza.

(Ereditato da Freezable)

Eventi

Changed

Si verifica quando Freezable o un oggetto che contiene è modificato.

(Ereditato da Freezable)

Si applica a