WindowChrome クラス

ウィンドウの非クライアント領域へのカスタマイズを記述するオブジェクトを表します。

継承階層

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.DependencyObject
      System.Windows.Freezable
        Microsoft.Windows.Shell.WindowChrome

名前空間:  Microsoft.Windows.Shell
アセンブリ:  Microsoft.Windows.Shell (Microsoft.Windows.Shell.dll 内)

構文

'宣言
Public Class WindowChrome _
    Inherits Freezable
public class WindowChrome : Freezable
public ref class WindowChrome : public Freezable
type WindowChrome =  
    class
        inherit Freezable
    end
public class WindowChrome extends Freezable

WindowChrome 型で公開されるメンバーは以下のとおりです。

コンストラクター

  名前 説明
パブリック メソッド WindowChrome WindowChrome クラスの新しいインスタンスを初期化します。

このページのトップへ

プロパティ

  名前 説明
パブリック プロパティ CanFreeze オブジェクトを変更不可能な状態にできるかどうかを示す値を取得します。 (Freezable から継承されます。)
パブリック プロパティ CaptionHeight ウィンドウ上部のキャプション領域の高さを取得または設定します。
パブリック プロパティ CornerRadius ウィンドウの角を丸める量を示す値を取得または設定します。
パブリック プロパティ DependencyObjectType このインスタンスの CLR 型をラップする DependencyObjectType を取得します。  (DependencyObject から継承されます。)
パブリック プロパティ Dispatcher この DispatcherObject が関連付けられている Dispatcher を取得します。 (DispatcherObject から継承されます。)
パブリック プロパティ静的メンバー GlassFrameCompleteThickness -1 の均一な厚みを取得します。
パブリック プロパティ GlassFrameThickness ウィンドウの周囲のグラス境界線の幅を示す値を取得または設定します。
パブリック プロパティ IsFrozen 現在このオブジェクトが変更可能な状態であるかどうかを示す値を取得します。 (Freezable から継承されます。)
パブリック プロパティ IsSealed このインスタンスが現在シールされている (読み取り専用である) かどうかを示す値を取得します。 (DependencyObject から継承されます。)
パブリック プロパティ NonClientFrameEdges ウィンドウ フレームのどの外枠がクライアントによって所有されないかを示す値を取得または設定します。
パブリック プロパティ ResizeBorderThickness ウィンドウのサイズ変更に使用する境界線の幅を示す値を取得または設定します。
パブリック プロパティ UseAeroCaptionButtons Windows Aero のキャプション ボタンでヒット テストが有効になっているかどうかを示す値を取得または設定します。

このページのトップへ

アタッチされるプロパティ

  名前 説明
アタッチされるパブリック プロパティ IsHitTestVisibleInChrome WPF ヒット テストが、ウィンドウの非クライアント領域内にある要素の方では有効かどうかを示す値を取得または設定します。
アタッチされるパブリック プロパティ ResizeGripDirection 入力要素のサイズ変更グリップ動作の方向を示す値を取得または設定します。
アタッチされるパブリック プロパティ WindowChrome ウィンドウにアタッチされた WindowChrome のインスタンスを取得または設定します。

このページのトップへ

メソッド

  名前 説明
パブリック メソッド CheckAccess 呼び出し元のスレッドがこの DispatcherObject にアクセスできるかどうかを確認します。 (DispatcherObject から継承されます。)
パブリック メソッド ClearValue(DependencyProperty) プロパティのローカル値を消去します。消去するプロパティは、DependencyProperty 識別子で指定します。 (DependencyObject から継承されます。)
パブリック メソッド ClearValue(DependencyPropertyKey) 読み取り専用プロパティのローカル値を消去します。消去するプロパティは、DependencyPropertyKey で指定します。 (DependencyObject から継承されます。)
パブリック メソッド Clone Freezable の変更可能な複製を作成し、オブジェクトの値の詳細コピーを作成します。このメソッドは、オブジェクトの依存関係プロパティをコピーするときに、式はコピーしますが (これらは解決されなくなっている場合があります)、アニメーションやその現在の値はコピーしません。 (Freezable から継承されます。)
プロテクト メソッド CloneCore 基本プロパティ値 (アニメーション化されていない値) を使用して、インスタンスを、指定した Freezable の複製 (詳細コピー) にします。 (Freezable から継承されます。)
パブリック メソッド CloneCurrentValue Freezable の現在の値を使用して、変更可能な複製 (詳細コピー) を作成します。 (Freezable から継承されます。)
プロテクト メソッド CloneCurrentValueCore プロパティの現在の値を使用して、インスタンスを、指定した Freezable の変更可能な複製 (詳細コピー) にします。 (Freezable から継承されます。)
パブリック メソッド CoerceValue 指定した依存関係プロパティの値を強制します。これは、呼び出し元の DependencyObject の依存関係プロパティのプロパティ メタデータで指定されている CoerceValueCallback 関数を呼び出すことによって実現されます。 (DependencyObject から継承されます。)
プロテクト メソッド CreateInstance Freezable クラスの新しいインスタンスを初期化します。 (Freezable から継承されます。)
プロテクト メソッド CreateInstanceCore WindowChrome クラスの新しいインスタンスを作成します。 (Freezable.CreateInstanceCore() をオーバーライドします。)
パブリック メソッド Equals 指定した DependencyObject が現在の DependencyObject と等しいかどうかを判断します。 (DependencyObject から継承されます。)
プロテクト メソッド Finalize オブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッド Freeze 現在のオブジェクトを変更不可能な状態にして、その IsFrozen プロパティを true に設定します。 (Freezable から継承されます。)
プロテクト メソッド FreezeCore Freezable オブジェクトを変更不可能な状態にするか、変更不可能な状態にできるかどうかをテストします。 (Freezable から継承されます。)
パブリック メソッド GetAsFrozen 基本プロパティ値 (アニメーション化されていない値) を使用して、Freezable の 固定されたコピーを作成します。コピーが固定されているため、参照によって任意の固定されたサブオブジェクトがコピーされます。 (Freezable から継承されます。)
プロテクト メソッド GetAsFrozenCore 基本プロパティ値 (アニメーション化されていない値) を使用して、インスタンスを、指定した Freezable の固定された複製にします。 (Freezable から継承されます。)
パブリック メソッド GetCurrentValueAsFrozen 現在のプロパティ値を使用して、Freezable の固定されたコピーを作成します。コピーが固定されているため、参照によって任意の固定されたサブオブジェクトがコピーされます。 (Freezable から継承されます。)
プロテクト メソッド GetCurrentValueAsFrozenCore 現在のインスタンスを、指定した Freezable の固定された複製にします。オブジェクトに、アニメーション化された依存関係プロパティが存在する場合、現在アニメーション化されている値がコピーされます。 (Freezable から継承されます。)
パブリック メソッド GetHashCode この DependencyObject のハッシュ コードを取得します。 (DependencyObject から継承されます。)
パブリック メソッド静的メンバー GetIsHitTestVisibleInChrome 指定した入力要素から IsHitTestVisibleInChrome 添付プロパティの値を取得します。
パブリック メソッド GetLocalValueEnumerator どの依存関係プロパティがこの DependencyObject 上にローカルに設定された値を持つかを確認するための、専用の列挙子を作成します。 (DependencyObject から継承されます。)
パブリック メソッド静的メンバー GetResizeGripDirection 指定した入力要素から ResizeGripDirection 添付プロパティの値を取得します。
パブリック メソッド GetType 現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド GetValue DependencyObject のこのインスタンスにある依存関係プロパティの現在の有効値を返します。 (DependencyObject から継承されます。)
パブリック メソッド静的メンバー GetWindowChrome 指定された Window から WindowChrome 添付プロパティの値を取得します。
パブリック メソッド InvalidateProperty 指定した依存関係プロパティの有効値を再評価します。 (DependencyObject から継承されます。)
プロテクト メソッド MemberwiseClone 現在の Object の簡易コピーを作成します。 (Object から継承されます。)
プロテクト メソッド OnChanged 現在の Freezable オブジェクトが変更されると呼び出されます。 (Freezable から継承されます。)
プロテクト メソッド OnFreezablePropertyChanged(DependencyObject, DependencyObject) 設定されたばかりの DependencyObjectType データ メンバーに対して、適切なコンテキスト ポインターが確立されていることを確認します。 (Freezable から継承されます。)
プロテクト メソッド OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) このメンバーは、Windows Presentation Foundation (WPF) インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 (Freezable から継承されます。)
プロテクト メソッド OnPropertyChanged DependencyObjectOnPropertyChanged 実装をオーバーライドして、Freezable 型の依存関係プロパティの変更に応答して任意の Changed ハンドラーも呼び出されるようにします。 (Freezable から継承されます。)
パブリック メソッド ReadLocalValue 依存関係プロパティのローカル値が存在する場合に、そのローカル値を返します。 (DependencyObject から継承されます。)
プロテクト メソッド ReadPreamble Freezable が有効なスレッドからアクセスされていることを確認します。Freezable の継承側は、依存関係プロパティでないデータ メンバーを読み取る任意の API の開始時に、このメソッドを呼び出す必要があります。 (Freezable から継承されます。)
パブリック メソッド静的メンバー SetIsHitTestVisibleInChrome 指定された入力要素の IsHitTestVisibleInChrome 添付プロパティの値を設定します。
パブリック メソッド静的メンバー SetResizeGripDirection 指定された入力要素の ResizeGripDirection 添付プロパティの値を設定します。
パブリック メソッド SetValue(DependencyProperty, Object) 依存関係プロパティ識別子を指定して、該当する依存関係プロパティのローカル値を設定します。 (DependencyObject から継承されます。)
パブリック メソッド SetValue(DependencyPropertyKey, Object) 読み取り専用の依存関係プロパティの DependencyPropertyKey 識別子を指定して、該当する依存関係プロパティのローカル値を設定します。 (DependencyObject から継承されます。)
パブリック メソッド静的メンバー SetWindowChrome 指定した WindowWindowChrome 添付プロパティの値を設定します。
プロテクト メソッド ShouldSerializeProperty シリアル化プロセスが、指定された依存関係プロパティの値をシリアル化する必要があるかどうかを示す値を返します。 (DependencyObject から継承されます。)
パブリック メソッド ToString 現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
パブリック メソッド VerifyAccess 呼び出し元のスレッドがこの DispatcherObject にアクセスできるように強制します。 (DispatcherObject から継承されます。)
プロテクト メソッド WritePostscript FreezableChanged イベントを発生させ、その OnChanged メソッドを呼び出します。Freezable から派生するクラスは、依存関係プロパティとして格納されていないクラス メンバーを変更する任意の API の終了時に、このメソッドを呼び出す必要があります。 (Freezable から継承されます。)
プロテクト メソッド WritePreamble Freezable が固定されておらず、有効なスレッド コンテキストからアクセスされていることを確認します。Freezable の継承側は、依存関係プロパティでないデータ メンバーに書き込む任意の API の開始時に、このメソッドを呼び出す必要があります。 (Freezable から継承されます。)

このページのトップへ

イベント

  名前 説明
パブリック イベント Changed Freezable 、またはこれに含まれているオブジェクトが変更されると発生します。 (Freezable から継承されます。)

このページのトップへ

フィールド

  名前 説明
パブリック フィールド静的メンバー CaptionHeightProperty CaptionHeight 依存関係プロパティを識別します。
パブリック フィールド静的メンバー CornerRadiusProperty CornerRadius 依存関係プロパティを識別します。
パブリック フィールド静的メンバー GlassFrameThicknessProperty GlassFrameThickness 依存関係プロパティを識別します。
パブリック フィールド静的メンバー IsHitTestVisibleInChromeProperty IsHitTestVisibleInChrome 依存関係プロパティを識別します。
パブリック フィールド静的メンバー NonClientFrameEdgesProperty NonClientFrameEdges 依存関係プロパティを識別します。
パブリック フィールド静的メンバー ResizeBorderThicknessProperty ResizeBorderThickness 依存関係プロパティを識別します。
パブリック フィールド静的メンバー ResizeGripDirectionProperty ResizeGripDirection 依存関係プロパティを識別します。
パブリック フィールド静的メンバー UseAeroCaptionButtonsProperty UseAeroCaptionButtons 依存関係プロパティを識別します。
パブリック フィールド静的メンバー WindowChromeProperty WindowChrome 依存関係プロパティを識別します。

このページのトップへ

解説

WindowChrome クラスを使用すると、オペレーティング システムのウィンドウ マネージャーの一般に予約されているウィンドウの非クライアント領域に Windows Presentation Foundation (WPF) のコンテンツを拡張できます。

標準の Windows

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

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

ウィンドウ要素

カスタム ウィンドウ

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

WindowStyle.None

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

WindowChrome

標準機能を保持したままウィンドウをカスタマイズするには、WindowChrome クラスを使用します。 WindowChrome クラスは、ビジュアルからウィンドウ枠の機能を分離して、アプリケーション ウィンドウのクライアント領域と非クライアント領域の境界を制御できるようにします。 WindowChrome クラスを使用すると、クライアント領域を拡張して非クライアント領域をカバーし、WPF コンテンツをウィンドウ枠に配置できます。 同時に、2 つの非表示領域でシステムの振る舞いを保ちます。サイズ変更境界領域とキャプション領域です。

WindowChrome クラスを使用したカスタム ウィンドウの作成には、2 つの主要な部分があります。 まず、WindowChrome オブジェクトで公開されているプロパティを設定し、ウィンドウの非クライアント パートをカスタマイズします。 その後、非クライアント領域に拡張されるアプリケーションの一部を定義するウィンドウのテンプレートを提供します。WindowChrome オブジェクトで公開されるプロパティは、ResizeBorderThicknessCaptionHeightCornerRadius、および GlassFrameThickness です。

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

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

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

CornerRadius プロパティは、ウィンドウの角の丸みの量を指定します。 このプロパティは、ウィンドウでグラス フレームが有効である場合は、まったく効果がありません。

GlassFrameThickness プロパティは、ウィンドウの周囲のグラス フレームの太さを指定します。 既定では、標準ウィンドウの外観をエミュレートするために WindowNonClientFrameThickness プロパティで指定されたシステム値を使用します。 グラス フレームを使用すると、最小化、最大化、閉じるのキャプション ボタンが表示され、操作できるようになります。 アプリケーションのアイコンとキャプションのテキストを表示するのは、アプリケーションです。 グラス フレームの幅が既定値よりも太くあるいは細くなるように、GlassFrameThickness プロパティを設定できます。

Caution メモ注意

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

グラス フレームを持たないカスタム ウィンドウを作成するには、GlassFrameThickness プロパティをどれも均一な 0 の値に設定します。 これは、標準キャプション ボタンを無効にし、非表示にします。

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

メモメモ

Aero は、Windows Vista で導入された Windows デスクトップの外観や機能に対する一連のビジュアル機能拡張です。Aero のより明確なビジュアル機能の 1 つが、半透明なグラス ウィンドウの枠です。デスクトップ ウィンドウ マネージャー (DWM) のデスクトップ構成機能で Windows Aero を有効にします。

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

フレーム コンテンツの外観と動作を定義する ControlTemplate を指定することにより、WPF コンテンツをウィンドウ フレームに拡張します。 カスタマイズしているウィンドウの種類に、ControlTemplate の TargetType を設定します。

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

既定では、ウィンドウの非クライアント領域内にあるビジュアル要素のどの部分も、対話型ではありません。 非クライアント領域の対話型要素を有効にし、WindowsChrome.IsHitTestVisibleInChrome 添付プロパティを要素に追加し、 に設定します。

次の 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 は、イメージおよび TextBlock を追加してアイコンおよびタイトルを表示します。 どちらの要素も、ウィンドウで対応するプロパティにバインドされます。 イメージの幅は、アイコンの既定のシステム サイズを取得する 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"/>

スレッド セーフ

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。 インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

参照

参照

Microsoft.Windows.Shell 名前空間