WindowChrome Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje obiekt opisujący dostosowania obszaru innego niż klient okna.
public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
inherit Freezable
Public Class WindowChrome
Inherits Freezable
- Dziedziczenie
Uwagi
Klasa WindowChrome umożliwia rozszerzenie zawartości Windows Presentation Foundation (WPF) do obszaru innego niż klient okna, które jest zwykle zarezerwowane dla menedżera okien systemu operacyjnego.
Okna standardowe
Standardowe okna składają się z dwóch nakładających się prostokątów. Zewnętrzny prostokąt to obszar inny niż klient, który jest często określany jako chrome. Jest rysowany i zarządzany przez menedżera okien systemu operacyjnego. Jego wymiary są określane przez standardowe ustawienia systemu operacyjnego. Ramka niekliencka zapewnia standardowe funkcje i zachowania okien. Obejmują one przyciski podpis (Minimalizuj, Maksymalizuj i Zamknij), obramowanie okna, zmienianie rozmiaru i przenoszenie zachowań, ikonę aplikacji i tytuł oraz menu systemowe. Wewnętrzny prostokąt jest obszarem klienta. Zawiera ona zawartość aplikacji i jest rysowana i zarządzana przez aplikację. Aby uzyskać więcej informacji na temat okien w aplikacjach WPF, zobacz WPF Windows Overview (Omówienie systemu Windows WPF).
Na poniższej ilustracji przedstawiono części okna standardowego.
Okna niestandardowe
Obramowanie okna można dostosować, ustawiając Window.WindowStyle właściwość na None lub przy użyciu WindowChrome klasy .
WindowStyle.None
Jednym ze sposobów dostosowania wyglądu okna aplikacji WPF jest ustawienie Window.WindowStyle właściwości na None. Spowoduje to usunięcie ramki innej niż klient z okna i pozostawienie tylko obszaru klienta, do którego można zastosować styl niestandardowy. Jednak po usunięciu ramki innej niż klient utracisz również funkcje i zachowania systemowe, które udostępnia, takie jak przyciski podpis i zmiana rozmiaru okna. Innym efektem ubocznym jest to, że okno będzie pokrywać pasek zadań systemu Windows, gdy jest zmaksymalizowany. Ustawienie WindowStyle.None umożliwia utworzenie całkowicie niestandardowej aplikacji, ale także wymaga zaimplementowania niestandardowej logiki w aplikacji w celu emulowania standardowego zachowania okna.
WindowChrome
Aby dostosować okno przy zachowaniu WindowChrome jego standardowej funkcjonalności, możesz użyć klasy . Klasa WindowChrome oddziela funkcjonalność ramki okna od wizualizacji i umożliwia sterowanie granicą między obszarami klienta i niekliencką okna aplikacji. Klasa WindowChrome umożliwia umieszczenie zawartości WPF w ramce okna przez rozszerzenie obszaru klienta w celu pokrycia obszaru innego niż klient. Jednocześnie zachowuje zachowania systemu za pośrednictwem dwóch niewidocznych obszarów; obramowanie zmiany rozmiaru i obszary podpis.
Istnieją dwie główne części tworzenia okna niestandardowego WindowChrome przy użyciu klasy . Najpierw należy dostosować część okna inną niż klient, ustawiając właściwości uwidocznione na WindowChrome obiekcie. Następnie należy podać szablon okna, który definiuje część aplikacji rozszerzonej do obszaru innego niż klient. Właściwości widoczne w WindowChrome obiekcie to ResizeBorderThickness, CaptionHeight, CornerRadiusi GlassFrameThickness.
Właściwość ResizeBorderThickness określa niewidoczne obramowanie wokół zewnętrznego okna aplikacji, które użytkownik może kliknąć i przeciągnąć, aby zmienić rozmiar okna.
Właściwość CaptionHeight określa niewidoczny obszar w górnej części okna, który umożliwia zachowania systemowe zwykle skojarzone z paskiem tytułu. Te zachowania obejmują: kliknięcie i przeciągnięcie, aby przenieść okno, kliknij dwukrotnie, aby zmaksymalizować okno, a następnie kliknij prawym przyciskiem myszy, aby wyświetlić menu systemowe.
Obramowanie zmiany rozmiaru i obszar podpis nie mają żadnych elementów wizualnych. Definiują one tylko obszary reagujące na dane wejściowe i umożliwiają standardowe zachowania okien udostępnionych przez system.
Właściwość CornerRadius określa kwotę zaokrąglaną rogami okna. Ta właściwość nie ma żadnego wpływu, jeśli szyba ramka jest włączona dla okna.
Właściwość GlassFrameThickness określa szerokość szklanej ramy wokół okna. Domyślnie używa wartości systemowej WindowNonClientFrameThickness określonej przez właściwość do emulowania wyglądu okna standardowego. Gdy jest używana ramka ze szkła, przyciski podpis w obszarze Minimalizuj, Maksymalizuj i Zamknij są widoczne i interaktywne. Aplikacja jest odpowiedzialna za wyświetlanie ikony aplikacji i podpis tekstu. Właściwość można ustawić GlassFrameThickness tak, aby ramka szybsza jest szersza lub węższa niż domyślna.
Przestroga
Rozmiar przycisków podpis nie zmienia się po GlassFrameThickness zmianie właściwości. Jeśli wysokość górnej górnej ramki szklanej jest mniejsza niż wysokość przycisków podpis, przyciski podpis nie będą całkowicie widoczne.
Aby utworzyć niestandardowe okno, które nie ma szklanej ramki, ustaw GlassFrameThickness właściwość na jednolitą wartość 0. Spowoduje to wyłączenie i ukrycie standardowych przycisków podpis.
Aby rozszerzyć ramę szkła, aby zakryć całe okno, ustaw GlassFrameThickness właściwość na wartość ujemną po każdej stronie. GlassFrameThickness Gdy właściwość jest ustawiona na wartość ujemną dla każdej strony, jego wartość coerced będzie równa GlassFrameCompleteThickness.
Uwaga
Aero to zestaw ulepszeń wizualnych wyglądu i funkcjonalności pulpitu systemu Windows, który został wprowadzony w systemie Windows Vista. Jedną z bardziej wizualnie oczywistych cech Aero jest przezroczyste szklane obramowania okien. Windows Aero jest włączony przez funkcję kompozycji pulpitu Menedżera okien pulpitu (DWM).
Efekty windows Aero glass nie są obsługiwane we wszystkich systemach operacyjnych i mogą być wyłączone w obsługiwanych systemach operacyjnych. Jeśli system Windows Aero nie jest dostępny, ramka szkła nie będzie wyświetlana niezależnie od GlassFrameThickness wartości właściwości. Obszar obramowania określony przez tę właściwość będzie wyświetlany jako czarny. Sprawdź właściwość, IsGlassEnabled aby sprawdzić, czy są dostępne efekty szkła Windows Aero. Jeśli efekty szklane nie są dostępne, należy podać alternatywny styl okna, który nie używa szklanej ramki lub użyć standardowego okna, ustawiając styl okna na wartość null.
Zawartość WPF można rozszerzyć na ramkę okna, określając kontrolkę ControlTemplate, która definiuje wygląd i zachowanie zawartości ramki. Typ obiektu TargetType kontrolki ControlTemplate należy ustawić na typ dostosowywalnego okna.
<ControlTemplate TargetType="{x:Type local:MainWindow}">
Domyślnie części wszystkich elementów wizualnych znajdujących się w obszarze innym niż klient okna nie są interaktywne. Aby włączyć elementy interaktywne w obszarze spoza klienta, dołącz właściwość WindowsChrome.IsHitTestVisibleInChrome dołączoną do elementu i ustaw ją na true.
Poniższy znacznik XAML przedstawia główne elementy potrzebne do dostosowania okna przy użyciu klasy 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>
Pierwszy setter dołącza oknoChrome do okna. Używa wszystkich wartości domyślnych dla właściwości WindowChrome, co sprawia, że okno wygląda jak standardowe okno.
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome />
</Setter.Value>
</Setter>
Szablon okna musi określić prezenter zawartości, aby wyświetlić zawartość okna określonego w aplikacji. Domyślnie klasa WindowChrome rozszerza obszar klienta w celu pokrycia obramowania innego niż klient. Aby odkryć ramkę ze szkła, należy określić margines wokół elementu ContentPresenter. Ten znacznik określa obramowanie z białym tłem wokół prezentera zawartości w celu emulacji wyglądu okna standardowego. Określa również margines powiązany z właściwością WindowNonClientFrameThickness, która pobiera domyślną szerokość systemu dla ramki.
<Border Background="White"
Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
Ikona aplikacji i tytuł nie są wyświetlane przez klasę WindowChrome; muszą zostać dodane do obramowania jako zawartość niestandardowa. Poniższy kod XAML dodaje obraz i blok tekstowy, aby wyświetlić ikonę i tytuł. Oba elementy są powiązane z odpowiednimi właściwościami w oknie. Szerokość obrazu jest powiązana z szerokością SmallIconSize, która pobiera domyślny rozmiar systemu dla ikony. Właściwość dołączona IsHitTestVisibleInChrome jest ustawiana na obrazie, aby mogła odbierać zdarzenia myszy.
<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"/>
Konstruktory
WindowChrome() |
Inicjuje nowe wystąpienie klasy WindowChrome. |
Pola
CaptionHeightProperty |
Identyfikuje CaptionHeight właściwość zależności. |
CornerRadiusProperty |
Identyfikuje CornerRadius właściwość zależności. |
GlassFrameThicknessProperty |
Identyfikuje GlassFrameThickness właściwość zależności. |
IsHitTestVisibleInChromeProperty |
Identyfikuje IsHitTestVisibleInChrome właściwość zależności. |
NonClientFrameEdgesProperty |
Identyfikuje NonClientFrameEdges właściwość zależności. |
ResizeBorderThicknessProperty |
Identyfikuje ResizeBorderThickness właściwość zależności. |
ResizeGripDirectionProperty |
Identyfikuje ResizeGripDirection właściwość zależności. |
UseAeroCaptionButtonsProperty |
Identyfikuje UseAeroCaptionButtons właściwość zależności. |
WindowChromeProperty |
Identyfikuje WindowChrome właściwość zależności. |
Właściwości
CanFreeze |
Pobiera wartość wskazującą, czy obiekt może być niemodyfikowalny. (Odziedziczone po Freezable) |
CaptionHeight |
Pobiera lub ustawia wysokość podpis obszaru w górnej części okna. |
CornerRadius |
Pobiera lub ustawia wartość wskazującą ilość zaokrąglanych narożników okna. |
DependencyObjectType |
DependencyObjectType Pobiera opakowujący typ clR tego wystąpienia. (Odziedziczone po DependencyObject) |
Dispatcher |
Dispatcher Pobiera tę DispatcherObject wartość skojarzona z. (Odziedziczone po DispatcherObject) |
GlassFrameCompleteThickness |
Pobiera jednolitą grubość -1. |
GlassFrameThickness |
Pobiera lub ustawia wartość wskazującą szerokość szklanego obramowania wokół okna. |
IsFrozen |
Pobiera wartość wskazującą, czy obiekt jest obecnie modyfikowalny. (Odziedziczone po Freezable) |
IsSealed |
Pobiera wartość wskazującą, czy to wystąpienie jest obecnie zapieczętowane (tylko do odczytu). (Odziedziczone po DependencyObject) |
NonClientFrameEdges |
Pobiera lub ustawia wartość wskazującą, które krawędzie ramki okna nie są własnością klienta. |
ResizeBorderThickness |
Pobiera lub ustawia wartość wskazującą szerokość obramowania używanego do zmiany rozmiaru okna. |
UseAeroCaptionButtons |
Pobiera lub ustawia wartość wskazującą, czy testowanie trafień jest włączone na przyciskach Windows Aero podpis. |
Właściwości dołączone
IsHitTestVisibleInChrome |
Reprezentuje obiekt opisujący dostosowania obszaru innego niż klient okna. |
ResizeGripDirection |
Reprezentuje obiekt opisujący dostosowania obszaru innego niż klient okna. |
WindowChrome |
Pobiera lub ustawia wystąpienie, WindowChrome które jest dołączone do okna. |
Metody
CheckAccess() |
Określa, czy wątek wywołujący ma dostęp do tego DispatcherObjectelementu . (Odziedziczone po DispatcherObject) |
ClearValue(DependencyProperty) |
Czyści wartość lokalną właściwości. Właściwość do wyczyszczenia jest określana przez DependencyProperty identyfikator. (Odziedziczone po DependencyObject) |
ClearValue(DependencyPropertyKey) |
Czyści wartość lokalną właściwości tylko do odczytu. Właściwość do wyczyszczenia jest określana przez DependencyPropertyKeyelement . (Odziedziczone po DependencyObject) |
Clone() |
Tworzy modyfikowalny klon obiektu Freezable, tworząc głębokie kopie wartości obiektu. Podczas kopiowania właściwości zależności obiektu ta metoda kopiuje wyrażenia (które mogą już nie być rozpoznawane), ale nie animacje ani ich bieżące wartości. (Odziedziczone po Freezable) |
CloneCore(Freezable) |
Sprawia, że wystąpienie jest klonem (kopią głęboką) określonej Freezable wartości właściwości przy użyciu wartości właściwości base (nie animowanych). (Odziedziczone po Freezable) |
CloneCurrentValue() |
Tworzy modyfikowalny klon (kopię głęboką) Freezable przy użyciu jego bieżących wartości. (Odziedziczone po Freezable) |
CloneCurrentValueCore(Freezable) |
Sprawia, że wystąpienie jest modyfikowalny klon (kopia głęboka) określonego Freezable przy użyciu bieżących wartości właściwości. (Odziedziczone po Freezable) |
CoerceValue(DependencyProperty) |
Coerce wartość określonej właściwości zależności. Jest to realizowane przez wywołanie dowolnej CoerceValueCallback funkcji określonej w metadanych właściwości dla właściwości zależności, ponieważ istnieje w wywołaniu DependencyObject. (Odziedziczone po DependencyObject) |
CreateInstance() |
Inicjuje nowe wystąpienie klasy Freezable. (Odziedziczone po Freezable) |
CreateInstanceCore() |
Tworzy nowe wystąpienie klasy WindowChrome. |
Equals(Object) |
Określa, czy podany DependencyObject element jest odpowiednikiem bieżącego DependencyObjectelementu . (Odziedziczone po DependencyObject) |
Freeze() |
Sprawia, że bieżący obiekt jest niezmodyfikowalny i ustawia jego IsFrozen właściwość na |
FreezeCore(Boolean) |
Sprawia, Freezable że obiekt jest niezmodyfikowalny lub sprawdza, czy można go niemodyfikować. (Odziedziczone po Freezable) |
GetAsFrozen() |
Tworzy zamrożoną kopię obiektu Freezableprzy użyciu wartości właściwości base (nie animowanych). Ponieważ kopia jest zamrożona, wszystkie zamrożone obiekty podrzędne są kopiowane przez odwołanie. (Odziedziczone po Freezable) |
GetAsFrozenCore(Freezable) |
Sprawia, że wystąpienie jest zamrożonym klonem określonej Freezable wartości właściwości przy użyciu wartości właściwości base (nie animowanych). (Odziedziczone po Freezable) |
GetCurrentValueAsFrozen() |
Tworzy zamrożoną kopię przy użyciu bieżących Freezable wartości właściwości. Ponieważ kopia jest zamrożona, wszystkie zamrożone obiekty podrzędne są kopiowane przez odwołanie. (Odziedziczone po Freezable) |
GetCurrentValueAsFrozenCore(Freezable) |
Sprawia, że bieżące wystąpienie jest klonem zamrożonym określonego Freezableobiektu . Jeśli obiekt ma animowane właściwości zależności, są kopiowane ich bieżące animowane wartości. (Odziedziczone po Freezable) |
GetHashCode() |
Pobiera kod skrótu dla tego pliku DependencyObject. (Odziedziczone po DependencyObject) |
GetIsHitTestVisibleInChrome(IInputElement) |
Pobiera wartość dołączonej IsHitTestVisibleInChrome właściwości z określonego elementu wejściowego. |
GetLocalValueEnumerator() |
Tworzy wyspecjalizowany moduł wyliczający do określania, które właściwości zależności mają lokalnie ustawione wartości w tym DependencyObjectelemecie . (Odziedziczone po DependencyObject) |
GetResizeGripDirection(IInputElement) |
Pobiera wartość dołączonej ResizeGripDirection właściwości z określonego elementu wejściowego. |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
GetValue(DependencyProperty) |
Zwraca bieżącą obowiązującą wartość właściwości zależności dla tego wystąpienia obiektu DependencyObject. (Odziedziczone po DependencyObject) |
GetWindowChrome(Window) |
Pobiera wartość dołączonej WindowChrome właściwości z określonego Windowelementu . |
InvalidateProperty(DependencyProperty) |
Ponownie oblicza efektywną wartość dla określonej właściwości zależności. (Odziedziczone po DependencyObject) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
OnChanged() |
Wywoływana po zmodyfikowaniu bieżącego Freezable obiektu. (Odziedziczone po Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Zapewnia, że odpowiednie wskaźniki kontekstu są ustanawiane dla DependencyObjectType elementu członkowskiego danych, który został właśnie ustawiony. (Odziedziczone po Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Ten element członkowski obsługuje infrastrukturę Windows Presentation Foundation (WPF) i nie jest przeznaczony do użycia bezpośrednio z kodu. (Odziedziczone po Freezable) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Zastępuje implementację DependencyObjectOnPropertyChanged(DependencyPropertyChangedEventArgs) metody w celu wywołania wszystkich Changed procedur obsługi w odpowiedzi na zmieniającą się właściwość zależności typu Freezable. (Odziedziczone po Freezable) |
ReadLocalValue(DependencyProperty) |
Zwraca wartość lokalną właściwości zależności, jeśli istnieje. (Odziedziczone po DependencyObject) |
ReadPreamble() |
Gwarantuje, że dostęp do obiektu Freezable jest uzyskiwany z prawidłowego wątku. Dziedzicze muszą Freezable wywoływać tę metodę na początku dowolnego interfejsu API, który odczytuje elementy członkowskie danych, które nie są właściwościami zależności. (Odziedziczone po Freezable) |
SetCurrentValue(DependencyProperty, Object) |
Ustawia wartość właściwości zależności bez zmiany źródła wartości. (Odziedziczone po DependencyObject) |
SetIsHitTestVisibleInChrome(IInputElement, Boolean) |
Ustawia wartość dołączonej IsHitTestVisibleInChrome właściwości w określonym elemecie wejściowym. |
SetResizeGripDirection(IInputElement, ResizeGripDirection) |
Ustawia wartość dołączonej ResizeGripDirection właściwości w określonym elemecie wejściowym. |
SetValue(DependencyProperty, Object) |
Ustawia wartość lokalną właściwości zależności określonej przez jego identyfikator właściwości zależności. (Odziedziczone po DependencyObject) |
SetValue(DependencyPropertyKey, Object) |
Ustawia wartość lokalną właściwości zależności tylko do odczytu określona przez DependencyPropertyKey identyfikator właściwości zależności. (Odziedziczone po DependencyObject) |
SetWindowChrome(Window, WindowChrome) |
Ustawia wartość dołączonej WindowChrome właściwości w określonym Windowobiekcie . |
ShouldSerializeProperty(DependencyProperty) |
Zwraca wartość wskazującą, czy procesy serializacji powinny serializować wartość podanej właściwości zależności. (Odziedziczone po DependencyObject) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
VerifyAccess() |
Wymusza, że wątek wywołujący ma dostęp do tego DispatcherObjectelementu . (Odziedziczone po DispatcherObject) |
WritePostscript() |
Changed Zgłasza zdarzenie dla Freezable metody i wywołuje jej OnChanged() metodę. Klasy pochodzące z Freezable programu powinny wywoływać tę metodę na końcu dowolnego interfejsu API, który modyfikuje składowe klasy, które nie są przechowywane jako właściwości zależności. (Odziedziczone po Freezable) |
WritePreamble() |
Sprawdza, czy Freezable element nie jest zamrożony i czy jest uzyskiwany dostęp do niego z prawidłowego kontekstu wątkowego. Freezable dziedzicze powinny wywoływać tę metodę na początku dowolnego interfejsu API, który zapisuje do elementów członkowskich danych, które nie są właściwościami zależności. (Odziedziczone po Freezable) |
Zdarzenia
Changed |
Występuje, gdy Freezable obiekt lub, który zawiera, jest modyfikowany. (Odziedziczone po Freezable) |