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) コンテンツを、オペレーティング システムのウィンドウ マネージャー用に通常予約されているウィンドウのクライアント以外の領域に拡張できます。

Standard Windows

標準ウィンドウは、2 つの重なり合う四角形で構成されます。 外側の四角形は、多くの場合、クロムと呼ばれる非クライアント領域です。 これは、オペレーティング システムのウィンドウ マネージャーによって描画および管理されます。 そのディメンションは、標準のオペレーティング システム設定によって決まります。 クライアント以外のフレームには、標準のウィンドウ機能と動作が用意されています。 これには、キャプション ボタン (最小化、最大化、閉じる)、ウィンドウの境界線、サイズ変更と移動の動作、アプリケーション アイコンとタイトル、システム メニューが含まれます。 内側の四角形は クライアント領域です。 アプリケーションの内容が含まれており、アプリケーションによって描画および管理されます。 WPF アプリケーションのウィンドウの詳細については、「 WPF Windows の概要」を参照してください。

次の図は、標準ウィンドウの部分を示しています。

Window 要素

カスタム ウィンドウ

ウィンドウの境界線をカスタマイズするには、 プロパティを Window.WindowStyleNone 設定するか、 クラスを WindowChrome 使用します。

WindowStyle.None

WPF アプリケーション ウィンドウの外観をカスタマイズする 1 つの方法は、 プロパティを Window.WindowStyle に設定することです None。 これにより、非クライアント フレームがウィンドウから削除され、カスタム スタイルを適用できるクライアント領域のみが残ります。 ただし、クライアント以外のフレームが削除されると、キャプションボタンやウィンドウのサイズ変更など、システムの機能と動作も失われます。 もう 1 つの副作用は、ウィンドウが最大化されたときに Windows タスク バーをカバーすることです。 を設定 WindowStyle.None すると、完全にカスタム アプリケーションを作成できますが、標準ウィンドウの動作をエミュレートするために、アプリケーションにカスタム ロジックを実装する必要もあります。

WindowChrome

標準機能を保持したままウィンドウをカスタマイズするには、 クラスを WindowChrome 使用できます。 クラスは WindowChrome 、ウィンドウ フレームの機能をビジュアルから分離し、アプリケーション ウィンドウのクライアント領域とクライアント以外の領域の境界を制御できます。 WindowChromeクラスを使用すると、クライアント領域を拡張してクライアント以外の領域をカバーすることで、WPF コンテンツをウィンドウ フレームに配置できます。 同時に、2つの目に見えない領域を通じてシステムの動作を保持します。境界線とキャプション領域のサイズを変更します。

クラスを使用してWindowChromeカスタム ウィンドウを作成するには、2 つのメインパーツがあります。 最初に、 オブジェクトに公開されるプロパティを設定して、ウィンドウのクライアント以外の部分を WindowChrome カスタマイズします。 次に、クライアント以外の領域に拡張されるアプリケーションの部分を定義するウィンドウのテンプレートを指定します。 オブジェクトでWindowChrome公開されるプロパティは、ResizeBorderThickness、、CaptionHeightCornerRadius、および GlassFrameThicknessです。

プロパティは ResizeBorderThickness 、ユーザーがクリックアンドドラッグしてウィンドウのサイズを変更できる、アプリケーション ウィンドウの外側の非表示の境界線を指定します。

プロパティは CaptionHeight 、通常、タイトル バーに関連付けられているシステム動作を可能にする、ウィンドウの上部にある非表示領域を指定します。 これらの動作には、クリックしてドラッグしてウィンドウを移動する、ダブルクリックしてウィンドウを最大化する、右クリックしてシステム メニューを表示するなどがあります。

サイズ変更の境界線とキャプション領域には視覚的な要素はありません。入力に応答し、標準のシステム提供のウィンドウ動作を有効にする領域のみを定義します。

プロパティは CornerRadius 、ウィンドウの角を丸める量を指定します。 ウィンドウに対してガラス フレームが有効になっている場合、このプロパティは効果がありません。

プロパティは GlassFrameThickness 、ウィンドウの周囲のガラス フレームの幅を指定します。 既定では、 プロパティで指定されたシステム値を WindowNonClientFrameThickness 使用して、標準ウィンドウの外観をエミュレートします。 ガラス フレームを使用すると、[最小化]、[最大化]、[閉じる] のキャプション ボタンが表示され、対話型になります。 アプリケーションは、アプリケーション アイコンを表示し、テキストをキャプションします。 プロパティを GlassFrameThickness 設定して、ガラスフレームを既定よりも広くまたは狭くすることができます。

注意事項

プロパティを変更しても、キャプション ボタンのGlassFrameThicknessサイズは変更されません。 ガラスフレームの上部の高さがキャプションボタンの高さよりも小さい場合、キャプションボタンは完全には表示されません。

ガラス枠のないカスタム ウィンドウを作成するには、 プロパティを GlassFrameThickness 均一値の 0 に設定します。 これにより、標準のキャプション ボタンが無効になり、非表示になります。

ウィンドウ全体をカバーするようにガラス フレームを拡張するには、 プロパティを任意の GlassFrameThickness 側の負の値に設定します。 プロパティが任意の GlassFrameThickness 辺の負の値に設定されている場合、強制値は と GlassFrameCompleteThickness等しくなります。

注意

Aero は、Windows Vista で導入された Windows デスクトップの外観と機能に対する視覚的な機能強化のセットです。 エアロの視覚的に明らかな特徴の1つは、半透明のガラス窓の境界線です。 Windows Aero は、デスクトップ ウィンドウ マネージャー (DWM) のデスクトップコンポジション機能によって有効になります。

Windows Aero Glass の効果は、すべてのオペレーティング システムでサポートされているわけではありません。サポートされているオペレーティング システムでは無効にすることができます。 Windows Aero が使用できない場合、プロパティ値に関係なく GlassFrameThickness ガラス フレームは表示されません。 このプロパティで指定された境界線領域は、代わりに黒で表示されます。プロパティを IsGlassEnabled 確認して、Windows Aero ガラス効果が使用可能であることを確認します。 ガラス効果を使用できない場合は、ガラス 枠を使用しない代替ウィンドウ スタイルを指定するか、ウィンドウ スタイルを null に設定して標準ウィンドウを使用する必要があります。

WPF コンテンツをウィンドウ フレームに拡張するには、フレーム コンテンツの外観と動作を定義する ControlTemplate を指定します。 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>  

最初のセッターは、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 実装をオーバーライドして、さらに型 Freezable の変化する依存関係プロパティへの応答として任意の Changed ハンドラーも呼び出します。

(継承元 Freezable)
ReadLocalValue(DependencyProperty)

ローカルの依存関係プロパティの値を返します (存在する場合)。

(継承元 DependencyObject)
ReadPreamble()

Freezable が有効なスレッドからアクセスされていることを確認します。 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)

指定した WindowChromeWindow 添付プロパティの値を設定します。

ShouldSerializeProperty(DependencyProperty)

シリアル化プロセスが、指定された依存関係プロパティの値をシリアル化する必要があるかどうかを示す値を返します。

(継承元 DependencyObject)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
VerifyAccess()

呼び出し元のスレッドがこの DispatcherObject にアクセスできるように強制します。

(継承元 DispatcherObject)
WritePostscript()

FreezableChanged イベントを発生させ、その OnChanged() メソッドを呼び出します。 Freezable から派生するクラスは、依存関係プロパティとして格納されていないクラス メンバーを変更するすべての API の終了時に、このメソッドを呼び出す必要があります。

(継承元 Freezable)
WritePreamble()

Freezable が固定されておらず、有効なスレッド コンテキストからアクセスされていることを確認します。 Freezable の継承側は、依存関係プロパティでないデータ メンバーに書き込む任意の API の開始時に、このメソッドを呼び出す必要があります。

(継承元 Freezable)

イベント

Changed

Freezable、またはこれに含まれているオブジェクトが変更されると発生します。

(継承元 Freezable)

適用対象