WindowChrome 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
창의 비 클라이언트 영역에 대한 사용자 지정을 설명하는 개체를 나타냅니다.
public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
inherit Freezable
Public Class WindowChrome
Inherits Freezable
- 상속
설명
이 WindowChrome 클래스를 사용하면 WPF(Windows Presentation Foundation) 콘텐츠를 일반적으로 운영 체제의 창 관리자용으로 예약된 창의 비 클라이언트 영역으로 확장할 수 있습니다.
표준 Windows
표준 창은 두 개의 겹치는 사각형으로 구성됩니다. 외부 사각형은 종종 크롬이라고 하는 비 클라이언트 영역입니다. 이는 운영 체제의 창 관리자에 의해 그려지고 관리됩니다. 해당 차원은 표준 운영 체제 설정에 따라 결정됩니다. 비 클라이언트 프레임은 표준 창 기능 및 동작을 제공합니다. 여기에는 캡션 단추(최소화, 최대화 및 닫기), 창 테두리, 크기 조정 및 이동 동작, 애플리케이션 아이콘 및 제목, 시스템 메뉴가 포함됩니다. 내부 사각형은 클라이언트 영역입니다. 애플리케이션의 내용이 포함되며 애플리케이션에서 그려지고 관리됩니다. WPF 애플리케이션의 창에 대한 자세한 내용은 WPF Windows 개요를 참조하세요.
다음 그림에서는 표준 창의 일부를 보여 줍니다.
사용자 지정 Windows
속성을 클래스로 설정 Window.WindowStyle 하거나 사용하여 WindowChrome 창 테두리를 None 사용자 지정할 수 있습니다.
WindowStyle.None
WPF 애플리케이션 창의 모양을 사용자 지정 하는 한 가지 방법은 속성을 설정 Window.WindowStyle 하는 것입니다 None. 이렇게 하면 창에서 비 클라이언트 프레임이 제거되고 사용자 지정 스타일을 적용할 수 있는 클라이언트 영역만 남습니다. 그러나 비 클라이언트 프레임이 제거되면 캡션 단추 및 창 크기 조정과 같이 제공하는 시스템 기능과 동작도 손실됩니다. 또 다른 부작용은 창이 최대화될 때 Windows 작업 표시줄을 덮는 것입니다. 설정을 WindowStyle.None 사용하면 완전히 사용자 지정 애플리케이션을 만들 수 있지만 표준 창 동작을 에뮬레이트하기 위해 애플리케이션에서 사용자 지정 논리를 구현해야 합니다.
WindowChrome
표준 기능을 유지하면서 창을 사용자 지정하려면 클래스를 WindowChrome 사용할 수 있습니다. 이 클래스는 WindowChrome 창 프레임의 기능을 시각적 개체와 구분하고 애플리케이션 창의 클라이언트 영역과 비 클라이언트 영역 간의 경계를 제어할 수 있습니다. 클래스를 WindowChrome 사용하면 클라이언트 영역이 아닌 영역을 포함하도록 확장하여 WPF 콘텐츠를 창 프레임에 배치할 수 있습니다. 동시에 두 개의 보이지 않는 영역을 통해 시스템 동작을 유지합니다. 크기 조정 테두리 및 캡션 영역입니다.
클래스를 사용하여 사용자 지정 창을 만드는 데는 두 가지 주요 부분이 있습니다 WindowChrome . 먼저 개체에 노출되는 WindowChrome 속성을 설정하여 창의 비 클라이언트 부분을 사용자 지정합니다. 그런 다음, 비 클라이언트 영역으로 확장되는 애플리케이션의 부분을 정의하는 창에 대한 템플릿을 제공합니다. 개체에 WindowChrome 노출되는 속성은 ResizeBorderThickness, CaptionHeightCornerRadius및 GlassFrameThickness.
이 속성은 ResizeBorderThickness 응용 프로그램 창 바깥쪽에 보이지 않는 테두리를 지정합니다. 이 테두리는 사용자가 클릭 및 끌기를 통해 창 크기를 조정할 수 있습니다.
이 속성은 CaptionHeight 일반적으로 제목 표시줄과 연결된 시스템 동작을 사용하도록 설정하는 창 맨 위에 보이지 않는 영역을 지정합니다. 이러한 동작에는 클릭 및 끌어서 창을 이동하고, 두 번 클릭하여 창을 최대화하고, 마우스 오른쪽 단추를 클릭하여 시스템 메뉴를 표시합니다.
크기 조정 테두리 및 캡션 영역에는 시각적 요소가 없습니다. 입력에 응답하고 표준 시스템 제공 창 동작을 사용하도록 설정하는 영역만 정의합니다.
이 속성은 CornerRadius 창의 모서리가 반올림되는 크기를 지정합니다. 이 속성은 창에 대해 유리 프레임을 사용하는 경우 아무런 영향을 주지 않습니다.
이 속성은 GlassFrameThickness 창 주위의 유리 프레임 너비를 지정합니다. 기본적으로 속성에 지정된 WindowNonClientFrameThickness 시스템 값을 사용하여 표준 창의 모양을 에뮬레이트합니다. 유리 프레임을 사용하면 최소화, 최대화 및 닫기 캡션 단추가 표시되고 대화형으로 표시됩니다. 애플리케이션은 애플리케이션 아이콘 및 캡션 텍스트를 표시합니다. 유리 프레임을 GlassFrameThickness 기본값보다 넓거나 좁게 만들도록 속성을 설정할 수 있습니다.
주의
속성이 변경될 때 캡션 단추의 GlassFrameThickness 크기는 변경되지 않습니다. 유리 프레임의 위쪽 높이가 캡션 단추의 높이보다 작으면 캡션 단추가 완전히 표시되지 않습니다.
유리 프레임이 없는 사용자 지정 창을 만들려면 속성을 균일한 값 0으로 설정합니다 GlassFrameThickness . 그러면 표준 캡션 단추가 비활성화되고 숨겨지게 됩니다.
유리 프레임을 확장하여 전체 창을 덮려면 아무 쪽에서든 속성을 음수 값으로 설정합니다 GlassFrameThickness . 속성이 GlassFrameThickness 어느 쪽에 대해 음수 값으로 설정되면 강제 변환된 값은 같아 GlassFrameCompleteThickness집니다.
메모
Aero는 Windows Vista에서 도입된 Windows 데스크톱의 모양과 기능에 대한 시각적 기능의 집합입니다. 에어로의 시각적으로 명백한 기능 중 하나는 반투명 유리 창 테두리입니다. Windows Aero는 DWM(데스크톱 창 관리자)의 데스크톱 컴퍼지션 기능을 통해 사용하도록 설정됩니다.
Windows Aero glass 효과는 모든 운영 체제에서 지원되지 않으며 지원되는 운영 체제에서 사용하지 않도록 설정할 수 있습니다. Windows Aero를 사용할 수 없는 경우 속성 값에 관계없이 유리 프레임이 GlassFrameThickness 표시되지 않습니다. 이 속성에 지정된 테두리 영역이 검은색으로 표시됩니다. IsGlassEnabled 속성을 확인하여 Windows Aero 유리 효과를 사용할 수 있는지 확인합니다. 유리 효과를 사용할 수 없는 경우 창 스타일을 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"/>
생성자
| Name | Description |
|---|---|
| WindowChrome() |
WindowChrome 클래스의 새 인스턴스를 초기화합니다. |
필드
| Name | Description |
|---|---|
| CaptionHeightProperty |
CaptionHeight 종속성 속성을 식별합니다. |
| CornerRadiusProperty |
CornerRadius 종속성 속성을 식별합니다. |
| GlassFrameThicknessProperty |
GlassFrameThickness 종속성 속성을 식별합니다. |
| IsHitTestVisibleInChromeProperty |
IsHitTestVisibleInChrome 종속성 속성을 식별합니다. |
| NonClientFrameEdgesProperty |
NonClientFrameEdges 종속성 속성을 식별합니다. |
| ResizeBorderThicknessProperty |
ResizeBorderThickness 종속성 속성을 식별합니다. |
| ResizeGripDirectionProperty |
ResizeGripDirection 종속성 속성을 식별합니다. |
| UseAeroCaptionButtonsProperty |
UseAeroCaptionButtons 종속성 속성을 식별합니다. |
| WindowChromeProperty |
WindowChrome 종속성 속성을 식별합니다. |
속성
| Name | Description |
|---|---|
| CanFreeze |
개체를 수정할 수 없게 만들 수 있는지 여부를 나타내는 값을 가져옵니다. (다음에서 상속됨 Freezable) |
| CaptionHeight |
창 맨 위에 있는 캡션 영역의 높이를 가져오거나 설정합니다. |
| CornerRadius |
창의 모서리가 반올림되는 양을 나타내는 값을 가져오거나 설정합니다. |
| DependencyObjectType |
이 인스턴스의 DependencyObjectType CLR 형식을 래핑하는 값을 가져옵니다. (다음에서 상속됨 DependencyObject) |
| Dispatcher |
연결된 이 값을 DispatcherDispatcherObject 가져옵니다. (다음에서 상속됨 DispatcherObject) |
| GlassFrameCompleteThickness |
-1의 균일한 두께를 가져옵니다. |
| GlassFrameThickness |
창 주위의 유리 테두리 너비를 나타내는 값을 가져오거나 설정합니다. |
| IsFrozen |
개체를 현재 수정할 수 있는지 여부를 나타내는 값을 가져옵니다. (다음에서 상속됨 Freezable) |
| IsSealed |
이 인스턴스가 현재 봉인되어 있는지 여부를 나타내는 값을 가져옵니다(읽기 전용). (다음에서 상속됨 DependencyObject) |
| NonClientFrameEdges |
클라이언트가 소유하지 않은 창 프레임의 가장자리를 나타내는 값을 가져오거나 설정합니다. |
| ResizeBorderThickness |
창 크기를 조정하는 데 사용되는 테두리의 너비를 나타내는 값을 가져오거나 설정합니다. |
| UseAeroCaptionButtons |
Windows Aero 캡션 단추에서 적중 테스트를 사용할 수 있는지 여부를 나타내는 값을 가져오거나 설정합니다. |
연결된 속성
| Name | Description |
|---|---|
| IsHitTestVisibleInChrome |
창의 비 클라이언트 영역에 대한 사용자 지정을 설명하는 개체를 나타냅니다. |
| ResizeGripDirection |
창의 비 클라이언트 영역에 대한 사용자 지정을 설명하는 개체를 나타냅니다. |
| WindowChrome |
창에 연결된 인스턴스 WindowChrome 를 가져오거나 설정합니다. |
메서드
| Name | Description |
|---|---|
| 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) |
지정된 종속성 속성의 값을 강제 변환합니다. 이 작업은 호출 CoerceValueCallback시 종속성 속성에 대한 속성 메타데이터에 지정된 함수 DependencyObject 를 호출하여 수행됩니다. (다음에서 상속됨 DependencyObject) |
| CreateInstance() |
Freezable 클래스의 새 인스턴스를 초기화합니다. (다음에서 상속됨 Freezable) |
| CreateInstanceCore() |
클래스의 새 인스턴스를 WindowChrome 만듭니다. |
| Equals(Object) |
제공된 DependencyObject 항목이 현재 DependencyObject와 같은지 여부를 확인합니다. (다음에서 상속됨 DependencyObject) |
| Freeze() |
현재 개체를 수정할 수 없게 만들고 해당 IsFrozen 속성을 .로 |
| FreezeCore(Boolean) |
개체를 Freezable 수정할 수 없게 만들거나 수정할 수 없는 개체를 만들 수 있는지 테스트합니다. (다음에서 상속됨 Freezable) |
| GetAsFrozen() |
기본(애니메이션이 아닌) 속성 값을 사용하여 고정된 복사본 Freezable을 만듭니다. 복사본이 고정되어 있으므로 고정된 하위 개체는 참조로 복사됩니다. (다음에서 상속됨 Freezable) |
| GetAsFrozenCore(Freezable) |
기본(애니메이션이 적용되지 않은) 속성 값을 사용하여 지정된 Freezable 인스턴스의 고정 클론을 만듭니다. (다음에서 상속됨 Freezable) |
| GetCurrentValueAsFrozen() |
using 현재 속성 값의 고정 복사본을 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) |
지정된 Window속성에서 WindowChrome 연결된 속성의 값을 가져옵니다. |
| InvalidateProperty(DependencyProperty) |
지정된 종속성 속성의 유효 값을 다시 평가합니다. (다음에서 상속됨 DependencyObject) |
| MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| OnChanged() |
현재 Freezable 개체가 수정될 때 호출됩니다. (다음에서 상속됨 Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
이 멤버는 WPF(Windows Presentation Foundation) 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. (다음에서 상속됨 Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
방금 설정된 데이터 멤버에 대해 적절한 컨텍스트 포인터가 DependencyObjectType 설정되었는지 확인합니다. (다음에서 상속됨 Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
형식Freezable의 OnPropertyChanged(DependencyPropertyChangedEventArgs) 변경된 종속성 속성에 대한 응답으로 처리 Changed 기를 호출하는 구현도 재정 DependencyObject 의합니다. (다음에서 상속됨 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) |
지정된 Window속성에 연결된 WindowChrome 속성의 값을 설정합니다. |
| ShouldSerializeProperty(DependencyProperty) |
serialization 프로세스가 제공된 종속성 속성의 값을 serialize해야 하는지 여부를 나타내는 값을 반환합니다. (다음에서 상속됨 DependencyObject) |
| ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
| VerifyAccess() |
호출 스레드가 이에 DispatcherObject액세스할 수 있도록 합니다. (다음에서 상속됨 DispatcherObject) |
| WritePostscript() |
에 Changed 대한 Freezable 이벤트를 발생시키고 해당 OnChanged() 메서드를 호출합니다. 파생 Freezable 되는 클래스는 종속성 속성으로 저장되지 않은 클래스 멤버를 수정하는 API의 끝에 이 메서드를 호출해야 합니다. (다음에서 상속됨 Freezable) |
| WritePreamble() |
Freezable 고정되지 않고 유효한 스레딩 컨텍스트에서 액세스되고 있는지 확인합니다. Freezable 상속자는 종속성 속성이 아닌 데이터 멤버에 쓰는 API의 시작 부분에서 이 메서드를 호출해야 합니다. (다음에서 상속됨 Freezable) |
이벤트
| Name | Description |
|---|---|
| Changed |
포함된 개체 또는 개체를 수정할 때 Freezable 발생합니다. (다음에서 상속됨 Freezable) |