WindowChrome 類別

定義

表示描述視窗非工作區自訂項目的物件。

public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
    inherit Freezable
Public Class WindowChrome
Inherits Freezable
繼承

備註

類別 WindowChrome 可讓您將Windows Presentation Foundation (WPF) 內容延伸至通常保留給作業系統視窗管理員的視窗非工作區。

標準 Windows

標準視窗是由兩個重迭的矩形所組成。 外部矩形是 非工作區,通常稱為 Chrome。 它會由作業系統的視窗管理員繪製和管理。 其維度取決於標準作業系統設定。 非用戶端框架提供標準視窗功能和行為。 其中包括標題按鈕 (最小化、最大化和關閉) 、視窗框線、調整大小和移動行為、應用程式圖示和標題,以及系統功能表。 內部矩形是 工作區。 它包含應用程式的內容,並由應用程式繪製和管理。 如需 WPF 應用程式中 Windows 的詳細資訊,請參閱 WPF Windows 概觀

下圖顯示標準視窗的部分。

視窗元素 Window 元素

自訂 Windows

您可以將 屬性設定 Window.WindowStyleNone 或使用 WindowChrome 類別來自訂視窗框線。

WindowStyle.None

自訂 WPF 應用程式視窗外觀的其中一種方式是將 Window.WindowStyle 屬性設定為 None 。 這會從視窗移除非用戶端框架,並只保留工作區,您可以套用自訂樣式。 不過,移除非用戶端框架時,您也會遺失它所提供的系統功能和行為,例如標題按鈕和視窗調整大小。 另一個副作用是視窗會在最大化時涵蓋 Windows 工作列。 設定 WindowStyle.None 可讓您建立完全自訂的應用程式,但也需要在應用程式中實作自訂邏輯,以模擬標準視窗行為。

WindowChrome

若要在保留其標準功能時自訂視窗,您可以使用 WindowChrome 類別。 類別 WindowChrome 會分隔視窗框架的功能與視覺效果,並可讓您控制應用程式視窗之用戶端與非用戶端區域之間的界限。 類別 WindowChrome 可讓您藉由擴充工作區來涵蓋非工作區,將 WPF 內容放在視窗框架中。 同時,它會透過兩個不可見的區域來保留系統行為;重設框線標題區域。

使用 類別建立自訂視窗 WindowChrome 有兩個主要部分。 首先,您可以藉由設定物件上 WindowChrome 公開的屬性來自訂視窗的非用戶端部分。 然後,您會提供視窗的範本,該視窗會定義延伸至非工作區的應用程式部分。 物件上 WindowChrome 公開的屬性為 ResizeBorderThicknessCaptionHeightCornerRadiusGlassFrameThickness

屬性 ResizeBorderThickness 會指定應用程式視窗外部的不可見框線,使用者可以按一下並拖曳以調整視窗的大小。

屬性 CaptionHeight 會指定視窗頂端的不可見區域,啟用通常與標題列相關聯的系統行為。 這些行為包括:按一下並拖曳以移動視窗、按兩下以最大化視窗,然後按一下滑鼠右鍵以顯示系統功能表。

重設框線和標題區域沒有任何視覺元素;它們只會定義回應輸入的區域,並啟用標準系統提供的視窗行為。

屬性 CornerRadius 會指定視窗角落四捨五入的數量。 如果視窗已啟用玻璃框架,這個屬性就不會有任何作用。

屬性 GlassFrameThickness 會指定視窗周圍玻璃框架的寬度。 根據預設,它會使用 屬性所 WindowNonClientFrameThickness 指定的系統值來模擬標準視窗的外觀。 使用玻璃框架時,[最小化]、[最大化] 和 [關閉] 的標題按鈕會顯示且互動式。 應用程式負責顯示應用程式圖示和標題文字。 您可以設定 GlassFrameThickness 屬性,讓玻璃框架變寬或變窄于預設值。

警告

屬性變更時 GlassFrameThickness ,不會變更標題按鈕的大小。 如果玻璃框架頂端的高度小於標題按鈕的高度,則不會完全看見標題按鈕。

若要建立沒有玻璃框架的自訂視窗,請將 GlassFrameThickness 屬性設定為統一值 0。 這會停用和隱藏標準標題按鈕。

若要擴充玻璃框架以涵蓋整個視窗,請將 GlassFrameThickness 屬性設定為任何一端的負值。 GlassFrameThickness當屬性設定為任何一端的負值時,其強制值會等於 GlassFrameCompleteThickness

注意

在 Windows Vista 中引進的 Windows 桌面外觀和功能,是一組視覺增強功能。 在視覺上更明顯的一個特徵是半透明玻璃窗口框線。 桌面視窗管理員 (DWM) 的桌面組合功能會啟用 Windows 裝置。

所有作業系統都不支援 Windows 裝置玻璃效果,而且可以在支援的作業系統上停用。 如果無法使用Windows,無論屬性值為何,都不會顯示 GlassFrameThickness 玻璃框架。 此屬性指定的框線區域會改為顯示為黑色。 IsGlassEnabled 檢查 屬性,以確認 Windows 的玻璃效果是否可用。 如果無法使用玻璃效果,您應該提供不使用玻璃框架的替代視窗樣式,或藉由將視窗樣式設定為 Null 來使用標準視窗。

您可以藉由指定可定義框架內容外觀和行為的 ControlTemplate,將 WPF 內容延伸至視窗框架。 您可以將 ControlTemplate 的 TargetType 設定為您要自訂的視窗類型。

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

根據預設,視窗非工作區內任何視覺元素的元件都不是互動式的。 若要在非工作區中啟用互動式元素,請將 WindowsChrome.IsHitTestVisibleInChrome 附加屬性附加至元素,並將其設定為 true。

下列 XAML 標記顯示使用 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>  

第一個 setter 會將 WindowChrome 附加至視窗。 它會使用 WindowChrome 屬性的所有預設值,讓視窗看起來像標準視窗。

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

視窗範本必須指定內容簡報者,以顯示應用程式中指定的視窗內容。 根據預設,WindowChrome 類別會擴充工作區以涵蓋非用戶端框線。 若要找出玻璃框架,您必須指定 ContentPresenter 周圍的邊界。 此標記會指定在內容簡報者周圍具有白色背景的框線,以模擬標準視窗的外觀。 它也會指定系結至 WindowNonClientFrameThickness 屬性的邊界,該屬性會取得框架的預設系統寬度。

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

WindowChrome 類別不會顯示應用程式圖示和標題;它們必須新增至框線做為自訂內容。 下列 XAML 會新增影像和文字區塊,以顯示圖示和標題。 這兩個專案都會系結至視窗上的對應屬性。 影像寬度會系結至 SmallIconSize 寬度,這會取得圖示的預設系統大小。 IsHitTestVisibleInChrome 附加屬性會在影像上設定,以便接收滑鼠事件。

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

建構函式

WindowChrome()

初始化 WindowChrome 類別的新執行個體。

欄位

CaptionHeightProperty

識別 CaptionHeight 相依性屬性。

CornerRadiusProperty

識別 CornerRadius 相依性屬性。

GlassFrameThicknessProperty

識別 GlassFrameThickness 相依性屬性。

IsHitTestVisibleInChromeProperty

識別 IsHitTestVisibleInChrome 相依性屬性。

NonClientFrameEdgesProperty

識別 NonClientFrameEdges 相依性屬性。

ResizeBorderThicknessProperty

識別 ResizeBorderThickness 相依性屬性。

ResizeGripDirectionProperty

識別 ResizeGripDirection 相依性屬性。

UseAeroCaptionButtonsProperty

識別 UseAeroCaptionButtons 相依性屬性。

WindowChromeProperty

識別 WindowChrome 相依性屬性。

屬性

CanFreeze

取得值,指出是否可以將物件設為不可修改。

(繼承來源 Freezable)
CaptionHeight

取得或設定視窗做上方的標題區域的高度。

CornerRadius

取得或設定值,指出要將視窗邊角變圓的程度。

DependencyObjectType

取得包裝 DependencyObjectType 這個實例 CLR 型別的 。

(繼承來源 DependencyObject)
Dispatcher

取得與這個 Dispatcher 關聯的 DispatcherObject

(繼承來源 DispatcherObject)
GlassFrameCompleteThickness

取得統一粗細 -1。

GlassFrameThickness

取得或設定值,這個值表示視窗玻璃效果框線。

IsFrozen

取得值,該值表示物件目前是否可修改。

(繼承來源 Freezable)
IsSealed

取得值,這個值表示此執行個體目前是否已密封 (唯讀)。

(繼承來源 DependencyObject)
NonClientFrameEdges

取得或設定值,指出指定哪些視窗框架邊緣非用戶端所擁有。

ResizeBorderThickness

取得值,這個值表示用於調整視窗框線的寬度。

UseAeroCaptionButtons

取得或設定值,指出是否啟用 Windows Aero 標題按鈕的點擊測試。

附加屬性

IsHitTestVisibleInChrome

表示描述視窗非工作區自訂項目的物件。

ResizeGripDirection

表示描述視窗非工作區自訂項目的物件。

WindowChrome

取得或設定附加至視窗的 WindowChrome 的執行個體。

方法

CheckAccess()

判斷呼叫的執行是否可以存取這個 DispatcherObject

(繼承來源 DispatcherObject)
ClearValue(DependencyProperty)

清除屬性的區域數值。 要清除的屬性是由 DependencyProperty 識別項所指定。

(繼承來源 DependencyObject)
ClearValue(DependencyPropertyKey)

清除唯讀屬性的區域數值。 要清除的屬性是由 DependencyPropertyKey 所指定。

(繼承來源 DependencyObject)
Clone()

建立這個 Freezable 的可修改複製,製作這個物件值的深層複製。 當複製這個物件的相依性屬性時,這個方法會複製運算式 (但可能已不再解析),但不會複製動畫或其目前值。

(繼承來源 Freezable)
CloneCore(Freezable)

使用基底 (非動畫) 屬性值,將執行個體設為指定 Freezable 的複製品 (深層複製)。

(繼承來源 Freezable)
CloneCurrentValue()

使用 Freezable 的目前值,建立它的可修改複製品 (深層複本)。

(繼承來源 Freezable)
CloneCurrentValueCore(Freezable)

使用目前的屬性值,讓執行個體成為指定之 Freezable 的可修改複本 (深層複本)。

(繼承來源 Freezable)
CoerceValue(DependencyProperty)

強制轉型所指定相依性屬性的值。 完成方式是叫用存在於呼叫 DependencyObject 之相依性屬性的屬性中繼資料中所指定的任何 CoerceValueCallback 函式。

(繼承來源 DependencyObject)
CreateInstance()

初始化 Freezable 類別的新執行個體。

(繼承來源 Freezable)
CreateInstanceCore()

建立 WindowChrome 類別的新執行個體。

Equals(Object)

判斷提供的 DependencyObject 和目前的 DependencyObject 是否相等。

(繼承來源 DependencyObject)
Freeze()

將目前的物件設為不可修改,並將其 IsFrozen 屬性設定為 true

(繼承來源 Freezable)
FreezeCore(Boolean)

Freezable 物件設為不可修改的,或測試是否可以將它設為不可修改的。

(繼承來源 Freezable)
GetAsFrozen()

使用基底 (非動畫) 屬性值,建立 Freezable 的凍結複本。 因為複本已凍結,所以會以傳址方式複製任何凍結子物件。

(繼承來源 Freezable)
GetAsFrozenCore(Freezable)

使用基底 (非動畫) 屬性值,將執行個體設為指定 Freezable 的凍結複本。

(繼承來源 Freezable)
GetCurrentValueAsFrozen()

使用目前屬性值,建立 Freezable 的凍結複本。 因為複本已凍結,所以會以傳址方式複製任何凍結子物件。

(繼承來源 Freezable)
GetCurrentValueAsFrozenCore(Freezable)

將目前執行個體設為所指定 Freezable 的凍結複本。 如果物件具有動畫相依性屬性,則會複製其目前的動畫值。

(繼承來源 Freezable)
GetHashCode()

取得這個 DependencyObject 的雜湊碼。

(繼承來源 DependencyObject)
GetIsHitTestVisibleInChrome(IInputElement)

從指定的輸入項目中取得 IsHitTestVisibleInChrome 附加屬性的值。

GetLocalValueEnumerator()

建立特定的列舉值,以判斷哪些相依性屬性在此 DependencyObject 上具有本機設定的值。

(繼承來源 DependencyObject)
GetResizeGripDirection(IInputElement)

從指定的輸入項目中取得 ResizeGripDirection 附加屬性的值。

GetType()

取得目前執行個體的 Type

(繼承來源 Object)
GetValue(DependencyProperty)

傳回 DependencyObject 的這個執行個體上之相依性屬性的目前有效值。

(繼承來源 DependencyObject)
GetWindowChrome(Window)

從指定的 WindowChrome 取得 Window 附加屬性的值。

InvalidateProperty(DependencyProperty)

重新評估指定相依性屬性的有效值。

(繼承來源 DependencyObject)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
OnChanged()

目前的 Freezable 物件遭到修改時進行呼叫。

(繼承來源 Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

確定已為剛剛設定的 DependencyObjectType 資料成員,建立適當的內容指標。

(繼承來源 Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

此成員支援Windows Presentation Foundation (WPF) 基礎結構,而且不適合直接從您的程式碼使用。

(繼承來源 Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

覆寫 OnPropertyChanged(DependencyPropertyChangedEventArgs)DependencyObject 實作也可以叫用任何 Changed 處理常式,以回應類型 Freezable 的變更相依性屬性。

(繼承來源 Freezable)
ReadLocalValue(DependencyProperty)

傳回相依性屬性的區域值 (如果存在)。

(繼承來源 DependencyObject)
ReadPreamble()

確定 Freezable 是從有效的執行緒進行存取。 如果 API 會讀取非相依性屬性的資料成員,則 Freezable 的繼承者必須在該 API 的開頭呼叫這個方法。

(繼承來源 Freezable)
SetCurrentValue(DependencyProperty, Object)

設定相依性屬性的值,而不需要變更其值來源。

(繼承來源 DependencyObject)
SetIsHitTestVisibleInChrome(IInputElement, Boolean)

設定指定之輸入項目上的 IsHitTestVisibleInChrome 附加屬性值。

SetResizeGripDirection(IInputElement, ResizeGripDirection)

設定指定之輸入項目上的 ResizeGripDirection 附加屬性值。

SetValue(DependencyProperty, Object)

設定相依性屬性的區域值 (由相依性屬性的識別碼所指定)。

(繼承來源 DependencyObject)
SetValue(DependencyPropertyKey, Object)

設定唯讀相依性屬性的區域數值 (由相依性屬性的 DependencyPropertyKey 識別項所指定)。

(繼承來源 DependencyObject)
SetWindowChrome(Window, WindowChrome)

設定指定之 WindowChrome 上的 Window 附加屬性值。

ShouldSerializeProperty(DependencyProperty)

傳回值,這個值表示序列化程序是否應該序列化所提供相依性屬性的值。

(繼承來源 DependencyObject)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
VerifyAccess()

請強制執行可以存取這個 DispatcherObject 的呼叫執行緒。

(繼承來源 DispatcherObject)
WritePostscript()

引發 FreezableChanged 事件,並叫用其 OnChanged() 方法。 在任何 API 修改未以相依性屬性儲存的類別成員之後,衍生自 Freezable 的類別應該在 API 的結尾呼叫這個方法。

(繼承來源 Freezable)
WritePreamble()

確認 Freezable 未凍結,而且是從有效的執行緒內容進行存取。 在任何 API 將資料寫入至非相依性屬性的資料成員之前,Freezable 繼承者應該在 API 的開頭呼叫這個方法。

(繼承來源 Freezable)

事件

Changed

發生於 Freezable 或所含的物件遭到修改時。

(繼承來源 Freezable)

適用於