WindowChrome Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un oggetto che descrive le personalizzazioni per l'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 di 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 standard del sistema operativo. Il frame non client fornisce funzionalità e comportamenti standard della finestra. Questi includono i pulsanti didascalia (Riduci a icona, Ingrandisci e Chiudi), il bordo della finestra, i comportamenti di ridimensionamento e spostamento, 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.
Finestre personalizzate
È possibile personalizzare un bordo finestra impostando la Window.WindowStyle proprietà su None o utilizzando la WindowChrome classe .
WindowStyle.None
Un modo per personalizzare l'aspetto di una finestra dell'applicazione WPF consiste nell'impostare la Window.WindowStyle proprietà su None. In questo modo il frame non client viene rimosso 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 di sistema forniti, ad esempio pulsanti di didascalia e ridimensionamento della finestra. 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 della finestra dagli oggetti visivi e consente di controllare il limite tra le aree client e 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; le aree di ridimensionamento del bordo e della didascalia .
Esistono due parti principali per creare una finestra personalizzata usando la WindowChrome classe . Prima di tutto, è possibile personalizzare la parte non client della finestra impostando le proprietà esposte sull'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 su cui l'utente può fare clic e trascinare per ridimensionare la finestra.
La CaptionHeight proprietà specifica un'area invisibile nella parte superiore della finestra che abilita i 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 ingrandire la finestra e fare clic con il pulsante destro del mouse per visualizzare il menu di sistema.
Il bordo di ridimensionamento e l'area della didascalia non hanno elementi visivi; definiscono solo le aree che rispondono all'input e abilitano i comportamenti standard delle finestre fornite dal sistema.
La CornerRadius proprietà specifica la quantità di arrotondamento degli angoli della finestra. 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 didascalia per Riduci a icona, Ingrandisci e Chiudi sono visibili e interattivi. L'applicazione è responsabile della visualizzazione dell'icona dell'applicazione e del testo della didascalia. È possibile impostare la GlassFrameThickness proprietà per rendere la cornice di vetro più ampia o più stretta rispetto all'impostazione predefinita.
Attenzione
Le dimensioni dei pulsanti della didascalia non cambiano quando la GlassFrameThickness proprietà viene modificata. Se l'altezza della parte superiore della cornice di vetro è inferiore all'altezza dei pulsanti della didascalia, i pulsanti della didascalia non saranno completamente visibili.
Per creare una finestra personalizzata che non dispone di una cornice di vetro, impostare la GlassFrameThickness proprietà su un valore uniforme pari a 0. In questo modo verranno disabilitati e nascosti i pulsanti della 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 coercito sarà uguale a GlassFrameCompleteThickness.
Annotazioni
Aero è un set di miglioramenti visivi per l'aspetto e la funzionalità del desktop di Windows introdotto in Windows Vista. Una delle caratteristiche più visivamente ovvie di Aero è bordi finestra vetro traslucente. Windows Aero è abilitato dalla funzionalità di composizione desktop di Desktop Window Manager (DWM).
Gli effetti 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 gli effetti vetro di Windows Aero siano disponibili. Se gli effetti di vetro non sono disponibili, è necessario fornire uno stile di finestra alternativo che non utilizza la cornice di vetro o utilizzare la finestra standard impostando lo stile della finestra su Null.
È possibile estendere il contenuto WPF nella cornice della finestra specificando un ControlTemplate che definisce l'aspetto e il comportamento del contenuto del frame. Impostare TargetType di ControlTemplate sul tipo di finestra che si sta personalizzando.
<ControlTemplate TargetType="{x:Type local:MainWindow}">
Per impostazione predefinita, le parti di tutti gli elementi visivi che si trovano 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 uno sfondo bianco intorno al relatore del contenuto per emulare l'aspetto di una finestra standard. Specifica inoltre 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 e il titolo dell'applicazione 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 viene 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
| Nome | Descrizione |
|---|---|
| WindowChrome() |
Inizializza una nuova istanza della classe WindowChrome. |
Campi
| Nome | Descrizione |
|---|---|
| CaptionHeightProperty |
Identifica la CaptionHeight proprietà di dipendenza. |
| CornerRadiusProperty |
Identifica la CornerRadius proprietà di dipendenza. |
| GlassFrameThicknessProperty |
Identifica la GlassFrameThickness proprietà di dipendenza. |
| IsHitTestVisibleInChromeProperty |
Identifica la IsHitTestVisibleInChrome proprietà di dipendenza. |
| NonClientFrameEdgesProperty |
Identifica la NonClientFrameEdges proprietà di dipendenza. |
| ResizeBorderThicknessProperty |
Identifica la ResizeBorderThickness proprietà di dipendenza. |
| ResizeGripDirectionProperty |
Identifica la ResizeGripDirection proprietà di dipendenza. |
| UseAeroCaptionButtonsProperty |
Identifica la UseAeroCaptionButtons proprietà di dipendenza. |
| WindowChromeProperty |
Identifica la WindowChrome proprietà di dipendenza. |
Proprietà
| Nome | Descrizione |
|---|---|
| CanFreeze |
Ottiene un valore che indica se l'oggetto può essere reso non modificabile. (Ereditato da Freezable) |
| CaptionHeight |
Ottiene o imposta l'altezza dell'area della didascalia nella parte superiore di una finestra. |
| CornerRadius |
Ottiene o imposta un valore che indica la quantità di arrotondamento degli 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 DispatcherDispatcherObject a cui è associato. (Ereditato da DispatcherObject) |
| GlassFrameCompleteThickness |
Ottiene uno spessore uniforme pari a -1. |
| GlassFrameThickness |
Ottiene o imposta un valore che indica la larghezza del bordo di vetro 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 questa istanza è attualmente sealed (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 utilizzato per ridimensionare una finestra. |
| UseAeroCaptionButtons |
Ottiene o imposta un valore che indica se l'hit testing è abilitato nei pulsanti della didascalia di Windows Aero. |
Proprietà associate
| Nome | Descrizione |
|---|---|
| IsHitTestVisibleInChrome |
Rappresenta un oggetto che descrive le personalizzazioni per l'area non client di una finestra. |
| ResizeGripDirection |
Rappresenta un oggetto che descrive le personalizzazioni per l'area non client di una finestra. |
| WindowChrome |
Ottiene o imposta l'istanza di WindowChrome associata a una finestra. |
Metodi
| Nome | Descrizione |
|---|---|
| CheckAccess() |
Determina se il thread chiamante ha accesso a questo DispatcherObjectoggetto . (Ereditato da DispatcherObject) |
| ClearValue(DependencyProperty) |
Cancella il valore locale di una proprietà. La proprietà da cancellare viene specificata da un DependencyProperty identificatore. (Ereditato da DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Cancella il valore locale di una proprietà di sola lettura. La proprietà da cancellare viene specificata da un oggetto DependencyPropertyKey. (Ereditato da DependencyObject) |
| Clone() |
Crea un clone modificabile dell'oggetto Freezable, eseguendo copie complete dei valori dell'oggetto. Quando si copiano le proprietà di dipendenza dell'oggetto, questo metodo copia le espressioni (che potrebbero non essere più risolte) ma non le animazioni o i relativi valori correnti. (Ereditato da Freezable) |
| CloneCore(Freezable) |
Rende l'istanza un clone (copia completa) dell'oggetto specificato Freezable usando valori di proprietà di base (non animati). (Ereditato da Freezable) |
| CloneCurrentValue() |
Crea un clone modificabile (copia completa) dell'oggetto Freezable utilizzando i relativi valori correnti. (Ereditato da Freezable) |
| CloneCurrentValueCore(Freezable) |
Rende l'istanza un clone modificabile (copia completa) dell'oggetto specificato Freezable utilizzando i valori delle proprietà correnti. (Ereditato da Freezable) |
| CoerceValue(DependencyProperty) |
Forza il valore della proprietà di dipendenza specificata. A tale scopo, richiamare qualsiasi CoerceValueCallback funzione specificata nei metadati della proprietà per la proprietà di dipendenza così come esiste nella chiamata DependencyObjectdi . (Ereditato da DependencyObject) |
| CreateInstance() |
Inizializza una nuova istanza della classe Freezable. (Ereditato da Freezable) |
| CreateInstanceCore() |
Crea una nuova istanza della WindowChrome classe . |
| Equals(Object) |
Determina se un oggetto specificato DependencyObject è equivalente all'oggetto corrente DependencyObject. (Ereditato da DependencyObject) |
| Freeze() |
Rende l'oggetto corrente non modificabile e imposta la relativa IsFrozen proprietà su |
| FreezeCore(Boolean) |
Rende l'oggetto Freezable non modificabile o verifica se può essere reso non modificabile. (Ereditato da Freezable) |
| GetAsFrozen() |
Crea una copia bloccata della proprietà , utilizzando i valori della Freezableproprietà base (non animati). Poiché la copia è bloccata, tutti gli oggetti secondari bloccati vengono copiati in base al riferimento. (Ereditato da Freezable) |
| GetAsFrozenCore(Freezable) |
Rende l'istanza un clone bloccato dell'oggetto specificato Freezable utilizzando valori di proprietà di base (non animati). (Ereditato da Freezable) |
| GetCurrentValueAsFrozen() |
Crea una copia bloccata dell'oggetto utilizzando i valori correnti delle Freezable proprietà. Poiché la copia è bloccata, tutti gli oggetti secondari bloccati vengono copiati in base al riferimento. (Ereditato da Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Rende l'istanza corrente un clone bloccato dell'oggetto specificato Freezable. 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 IsHitTestVisibleInChrome proprietà associata dall'elemento di input specificato. |
| GetLocalValueEnumerator() |
Crea un enumeratore specializzato per determinare quali proprietà di dipendenza hanno valori impostati localmente in questo DependencyObjectoggetto . (Ereditato da DependencyObject) |
| GetResizeGripDirection(IInputElement) |
Ottiene il valore della ResizeGripDirection proprietà associata dall'elemento di input specificato. |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| GetValue(DependencyProperty) |
Restituisce il valore effettivo corrente di una proprietà di dipendenza in questa istanza di un oggetto DependencyObject. (Ereditato da DependencyObject) |
| GetWindowChrome(Window) |
Ottiene il valore della WindowChrome proprietà associata dall'oggetto specificato Window. |
| InvalidateProperty(DependencyProperty) |
Rivaluta il valore effettivo per la proprietà di dipendenza specificata. (Ereditato da DependencyObject) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| OnChanged() |
Chiamato quando l'oggetto corrente Freezable viene modificato. (Ereditato da Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Questo membro supporta l'infrastruttura di Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice. (Ereditato da Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Assicura che vengano stabiliti puntatori di contesto appropriati per un DependencyObjectType membro dati appena impostato. (Ereditato da Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Esegue l'override dell'implementazione DependencyObject di OnPropertyChanged(DependencyPropertyChangedEventArgs) per richiamare anche i Changed gestori in risposta a una proprietà di dipendenza modificata 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'oggetto Freezable sia accessibile da un thread valido. Gli eredi di Freezable devono chiamare questo metodo all'inizio di qualsiasi API che legge i membri dati che non sono proprietà di dipendenza. (Ereditato da Freezable) |
| SetCurrentValue(DependencyProperty, Object) |
Imposta il valore di una proprietà di dipendenza senza modificarne l'origine del valore. (Ereditato da DependencyObject) |
| SetIsHitTestVisibleInChrome(IInputElement, Boolean) |
Imposta il valore della IsHitTestVisibleInChrome proprietà associata sull'elemento di input specificato. |
| SetResizeGripDirection(IInputElement, ResizeGripDirection) |
Imposta il valore della ResizeGripDirection proprietà associata sull'elemento di input specificato. |
| SetValue(DependencyProperty, Object) |
Imposta il valore locale di una proprietà di dipendenza, specificato dall'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 WindowChrome proprietà associata nell'oggetto specificato Window. |
| ShouldSerializeProperty(DependencyProperty) |
Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore per la 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 questo DispatcherObjectoggetto . (Ereditato da DispatcherObject) |
| WritePostscript() |
Genera l'evento Changed per Freezable e richiama il relativo OnChanged() metodo. Le classi che derivano da Freezable devono chiamare questo metodo alla fine di qualsiasi API che modifica i membri della classe non archiviati come proprietà di dipendenza. (Ereditato da Freezable) |
| WritePreamble() |
Verifica che l'oggetto Freezable non sia bloccato e che sia accessibile da un contesto di threading valido. Freezable Gli eredi devono chiamare questo metodo all'inizio di qualsiasi API che scrive nei membri dati che non sono proprietà di dipendenza. (Ereditato da Freezable) |
Eventi
| Nome | Descrizione |
|---|---|
| Changed |
Si verifica quando l'oggetto Freezable o un oggetto che contiene viene modificato. (Ereditato da Freezable) |