Freigeben über


WindowChrome-Klasse

Stellt ein Objekt dar, das die Anpassungen an den Nicht-Clientbereich eines Fensters beschreibt.

Vererbungshierarchie

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

Namespace:  Microsoft.Windows.Shell
Assembly:  Microsoft.Windows.Shell (in Microsoft.Windows.Shell.dll)

Syntax

'Declaration
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

Der WindowChrome-Typ macht die folgenden Member verfügbar.

Konstruktoren

  Name Beschreibung
Öffentliche Methode WindowChrome Initialisiert eine neue Instanz der WindowChrome-Klasse.

Zum Seitenanfang

Eigenschaften

  Name Beschreibung
Öffentliche Eigenschaft CanFreeze Ruft einen Wert ab, der angibt, ob das Objekt als nicht änderbar festgelegt werden kann. (Von Freezable geerbt.)
Öffentliche Eigenschaft CaptionHeight Ruft die Höhe des Beschriftungsbereichs oben im Fenster ab oder legt diese fest.
Öffentliche Eigenschaft CornerRadius Ruft einen Wert ab, der den Betrag angibt, um den die Ecken eines Fensters abgerundet werden, oder legt diesen fest.
Öffentliche Eigenschaft DependencyObjectType Ruft den DependencyObjectType ab, der den CLR-Typ dieser Instanz umschließt.  (Von DependencyObject geerbt.)
Öffentliche Eigenschaft Dispatcher Ruft den Dispatcher ab, der diesem DispatcherObject zugeordnet ist. (Von DispatcherObject geerbt.)
Öffentliche EigenschaftStatischer Member GlassFrameCompleteThickness Ruft eine einheitliche Breite von -1 ab.
Öffentliche Eigenschaft GlassFrameThickness Ruft einen Wert ab, der die Breite des Glasrahmens um ein Fenster angibt, oder legt diesen fest.
Öffentliche Eigenschaft IsFrozen Ruft einen Wert ab, der angibt, ob das Objekt gegenwärtig änderbar ist. (Von Freezable geerbt.)
Öffentliche Eigenschaft IsSealed Ruft einen Wert ab, der angibt, ob diese Instanz derzeit versiegelt (schreibgeschützt) ist. (Von DependencyObject geerbt.)
Öffentliche Eigenschaft NonClientFrameEdges Ruft einen Wert ab, der angibt, welche Ränder des Fensterrahmens nicht im Besitz des Clients sind, oder legt diesen fest.
Öffentliche Eigenschaft ResizeBorderThickness Ruft einen Wert ab, der die Breite des Rahmens angibt, der zum Ändern der Größe eines Fensters verwendet wird, oder legt diesen fest.
Öffentliche Eigenschaft UseAeroCaptionButtons Ruft einen Wert ab, der angibt, ob Treffertests für die Windows Aero-Titelleistenschaltflächen aktiviert sind, oder legt diesen fest.

Zum Seitenanfang

Angefügte Eigenschaften

  Name Beschreibung
Öffentliche angefügte Eigenschaft IsHitTestVisibleInChrome Ruft einen Wert ab, der angibt, ob WPF-Treffertests für den Teil eines Elements im Nicht-Clientbereich eines Fensters aktiviert sind, oder legt diesen fest.
Öffentliche angefügte Eigenschaft ResizeGripDirection Ruft einen Wert ab, der die Richtung des Verhaltens des Ziehpunkts zur Größenänderung auf einem Eingabeelement angibt, oder legt diesen fest.
Öffentliche angefügte Eigenschaft WindowChrome Ruft die Instanz von WindowChrome ab, die an ein Fenster angehängt wird, oder legt diese fest.

Zum Seitenanfang

Methoden

  Name Beschreibung
Öffentliche Methode CheckAccess Bestimmt, ob der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Von DispatcherObject geerbt.)
Öffentliche Methode ClearValue(DependencyProperty) Löscht den lokalen Wert einer Eigenschaft.Die zu löschende Eigenschaft wird mit einem DependencyProperty-Bezeichner angegeben. (Von DependencyObject geerbt.)
Öffentliche Methode ClearValue(DependencyPropertyKey) Löscht den lokalen Wert einer schreibgeschützten Eigenschaft.Die zu löschende Eigenschaft wird mit einem DependencyPropertyKey angegeben. (Von DependencyObject geerbt.)
Öffentliche Methode Clone Erstellt einen änderbaren Klon der Freezable, indem tiefe Kopien von den Werten des Objekts erzeugt werden.Beim Kopieren von Abhängigkeitseigenschaften des Objekts kopiert diese Methode Ausdrücke (die jedoch möglicherweise nicht mehr aufgelöst werden können), jedoch keine Animationen oder ihre aktuellen Werte. (Von Freezable geerbt.)
Geschützte Methode CloneCore Definiert die Instanz als Klon (tiefe Kopie) des angegebenen Freezable mit Basiseigenschaftswerten (nicht animiert). (Von Freezable geerbt.)
Öffentliche Methode CloneCurrentValue Erstellt einen änderbaren Klon (tiefe Kopie) von Freezable mit den aktuellen Werten. (Von Freezable geerbt.)
Geschützte Methode CloneCurrentValueCore Definiert die Instanz mit aktuellen Eigenschaftswerten als änderbaren Klon (tiefe Kopie) des angegebenen Freezable. (Von Freezable geerbt.)
Öffentliche Methode CoerceValue Wandelt den Wert der angegebenen Abhängigkeitseigenschaft um.Für die Umwandlung wird eine vorhandene CoerceValueCallback-Funktion aufgerufen, die in den Metadaten der Abhängigkeitseigenschaft für das aufrufende DependencyObject angegeben ist. (Von DependencyObject geerbt.)
Geschützte Methode CreateInstance Initialisiert eine neue Instanz der Freezable-Klasse. (Von Freezable geerbt.)
Geschützte Methode CreateInstanceCore Erstellt eine neue Instanz der WindowChrome-Klasse. (Überschreibt Freezable.CreateInstanceCore().)
Öffentliche Methode Equals Bestimmt, ob ein angegebenes DependencyObject dem aktuellen DependencyObject entspricht. (Von DependencyObject geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche Methode Freeze Definiert das aktuelle Objekt als nicht änderbar und legt seine IsFrozen-Eigenschaft auf true fest. (Von Freezable geerbt.)
Geschützte Methode FreezeCore Legt das Freezable-Objekt als nicht änderbar fest oder überprüft, ob es als nicht änderbar festgelegt werden kann. (Von Freezable geerbt.)
Öffentliche Methode GetAsFrozen Erstellt eine fixierte Kopie von Freezable mit Basiseigenschaftswerten (nicht animiert).Da die Kopie fixiert ist, werden alle fixierten Unterobjekte als Verweis kopiert. (Von Freezable geerbt.)
Geschützte Methode GetAsFrozenCore Definiert die Instanz als fixierten Klon des angegebenen Freezable mit Basiseigenschaftswerten (nicht animiert). (Von Freezable geerbt.)
Öffentliche Methode GetCurrentValueAsFrozen Erstellt eine fixierte Kopie von Freezable mit aktuellen Eigenschaftswerten.Da die Kopie fixiert ist, werden alle fixierten Unterobjekte als Verweis kopiert. (Von Freezable geerbt.)
Geschützte Methode GetCurrentValueAsFrozenCore Legt die aktuelle Instanz als fixierten Klon des angegebenen Freezable fest.Wenn das Objekt über animierte Abhängigkeitseigenschaften verfügt, werden die aktuellen animierten Werte kopiert. (Von Freezable geerbt.)
Öffentliche Methode GetHashCode Ruft einen Hashcode für dieses DependencyObject ab. (Von DependencyObject geerbt.)
Öffentliche MethodeStatischer Member GetIsHitTestVisibleInChrome Ruft den Wert der angefügten IsHitTestVisibleInChrome-Eigenschaft vom angegebenen Eingabeelement ab.
Öffentliche Methode GetLocalValueEnumerator Erstellt einen spezialisierten Enumerator, mit dem bestimmt wird, welche Abhängigkeitseigenschaften dieses DependencyObject über lokal festgelegte Werte verfügen. (Von DependencyObject geerbt.)
Öffentliche MethodeStatischer Member GetResizeGripDirection Ruft den Wert der angefügten ResizeGripDirection-Eigenschaft vom angegebenen Eingabeelement ab.
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche Methode GetValue Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft in dieser Instanz eines DependencyObject zurück. (Von DependencyObject geerbt.)
Öffentliche MethodeStatischer Member GetWindowChrome Ruft den Wert der angefügten WindowChrome-Eigenschaft aus dem angegebenen Window ab.
Öffentliche Methode InvalidateProperty Berechnet den effektiven Wert für die angegebene Abhängigkeitseigenschaft neu (Von DependencyObject geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Geschützte Methode OnChanged Wird aufgerufen, wenn das aktuelle Freezable-Objekt geändert wird. (Von Freezable geerbt.)
Geschützte Methode OnFreezablePropertyChanged(DependencyObject, DependencyObject) Stellt sicher, dass entsprechende Kontextzeiger für einen gerade festgelegten DependencyObjectType-Datenmember eingerichtet werden. (Von Freezable geerbt.)
Geschützte Methode OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) Der Member unterstützt die Windows Presentation Foundation (WPF)-Infrastruktur und ist nicht für die direkte Verwendung im Code vorgesehen. (Von Freezable geerbt.)
Geschützte Methode OnPropertyChanged Überschreibt die DependencyObject-Implementierung von OnPropertyChanged, um auch alle Changed-Handler als Reaktion auf eine Änderung einer Abhängigkeitseigenschaft vom Typ Freezable aufzurufen. (Von Freezable geerbt.)
Öffentliche Methode ReadLocalValue Gibt, sofern vorhanden, den lokalen Wert einer Abhängigkeitseigenschaft zurück. (Von DependencyObject geerbt.)
Geschützte Methode ReadPreamble Stellt sicher, dass über einen gültigen Thread auf Freezable zugegriffen wird.Erben von Freezable müssen diese Methode am Anfang jeder API aufrufen, die Datenmember liest, bei denen es sich nicht um Abhängigkeitseigenschaften handelt. (Von Freezable geerbt.)
Öffentliche MethodeStatischer Member SetIsHitTestVisibleInChrome Legt den Wert der angefügten Eigenschaft IsHitTestVisibleInChrome für das angegebene Eingabeelement fest.
Öffentliche MethodeStatischer Member SetResizeGripDirection Legt den Wert der angefügten Eigenschaft ResizeGripDirection für das angegebene Eingabeelement fest.
Öffentliche Methode SetValue(DependencyProperty, Object) Legt den lokalen Wert einer Abhängigkeitseigenschaft fest, die über ihren Bezeichner angegeben wird. (Von DependencyObject geerbt.)
Öffentliche Methode SetValue(DependencyPropertyKey, Object) Legt den lokalen Wert einer schreibgeschützten Abhängigkeitseigenschaft fest, die über ihren DependencyPropertyKey-Bezeichner angegeben wird. (Von DependencyObject geerbt.)
Öffentliche MethodeStatischer Member SetWindowChrome Legt den Wert der angefügten WindowChrome-Eigenschaft auf das angegebene Window fest.
Geschützte Methode ShouldSerializeProperty Gibt einen Wert zurück, der angibt, ob Serialisierungsprozesse den Wert der bereitgestellten Abhängigkeitseigenschaft serialisieren sollen. (Von DependencyObject geerbt.)
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Öffentliche Methode VerifyAccess Erzwingt, dass der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Von DispatcherObject geerbt.)
Geschützte Methode WritePostscript Löst das Changed-Ereignis für Freezable aus und ruft seine OnChanged-Methode auf.Von Freezable abgeleitete Klassen sollten diese Methode am Ende jeder API aufrufen, die nicht als Abhängigkeitseigenschaften gespeicherte Klassenmember ändert. (Von Freezable geerbt.)
Geschützte Methode WritePreamble Stellt sicher, dass das Freezable nicht fixiert ist und dass über einen gültigen Threadkontext darauf zugegriffen wird.Erben von Freezable sollten diese Methode am Anfang jeder API aufrufen, die Datenmember schreibt, bei denen es sich nicht um Abhängigkeitseigenschaften handelt. (Von Freezable geerbt.)

Zum Seitenanfang

Ereignisse

  Name Beschreibung
Öffentliches Ereignis Changed Tritt auf, wenn Freezable oder ein darin enthaltenes Objekt geändert wird. (Von Freezable geerbt.)

Zum Seitenanfang

Felder

  Name Beschreibung
Öffentliches FeldStatischer Member CaptionHeightProperty Bezeichnet die CaptionHeight-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member CornerRadiusProperty Bezeichnet die CornerRadius-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member GlassFrameThicknessProperty Bezeichnet die GlassFrameThickness-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member IsHitTestVisibleInChromeProperty Bezeichnet die IsHitTestVisibleInChrome-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member NonClientFrameEdgesProperty Bezeichnet die NonClientFrameEdges-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member ResizeBorderThicknessProperty Bezeichnet die ResizeBorderThickness-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member ResizeGripDirectionProperty Bezeichnet die ResizeGripDirection-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member UseAeroCaptionButtonsProperty Bezeichnet die UseAeroCaptionButtons-Abhängigkeitseigenschaft.
Öffentliches FeldStatischer Member WindowChromeProperty Bezeichnet die WindowChrome-Abhängigkeitseigenschaft.

Zum Seitenanfang

Hinweise

Die WindowChrome-Klasse ermöglicht Ihnen, den Inhalt von Windows Presentation Foundation (WPF) in den Nicht-Clientbereich eines Fensters zu erweitern, das i. d. R. für den Fenster-Manager des Betriebssystems reserviert ist.

Standardfenster

Standardfenster bestehen aus zwei überlappenden Rechtecken. Das äußere Rechteck ist der Nicht-Clientbereich, der häufig als Chrombezeichnet wird. Es wird vom Fenster-Manager des Betriebssystem gezeichnet und verwaltet. Die Dimensionen werden durch Standardeinstellungen des Betriebssystems bestimmt. Der Nicht-Client-Frame bietet Standardfensterfunktionen und -verhaltensweisen. Dazu gehören Titelleistenschaltflächen (Minimieren, Maximieren und Schließen), der Fensterrahmen, Verhaltensweisen zum Ändern der Größe und zum Verschieben, das bzw. der Anwendungssymbol und -titel und das Systemmenü. Das innere Rechteck ist der Clientbereich. Es enthält den Inhalt der Anwendung und wird von der Anwendung gezeichnet und verwaltet. Weitere Informationen zu Fenstern in WPF-Anwendungen finden Sie unter Übersicht über WPF-Fenster.

Die folgende Abbildung zeigt die Teile eines Standardfensters.

Fensterelemente

Benutzerdefinierte Fenster

Sie können einen Fensterrahmen anpassen, indem Sie die Window.WindowStyle-Eigenschaft auf None festlegen oder die WindowChrome-Klasse verwenden.

WindowStyle.None

Eine Möglichkeit zum Anpassen der Darstellung eines WPF-Anwendungsfensters besteht darin, die Window.WindowStyle-Eigenschaft auf None festzulegen. Dadurch wird der Nicht-Client-Frame vom Fenster entfernt, sodass nur den Clientbereich übrigbleibt, auf den Sie ein benutzerdefiniertes Format anwenden können. Wenn jedoch der Nicht-Clientrahmen entfernt wird, verlieren Sie auch die bereitgestellten Systemfunktionen und -verhalten, z. B. Titelleistenschaltfläche und Größenanpassung von Fenstern. Ein anderer Nebeneffekt ist, dass das Fenster beim Maximieren die Windows-Taskleiste bedeckt. Das Festlegen von WindowStyle.None ermöglicht es Ihnen, eine vollständig benutzerdefinierte Anwendung zu erstellen, erfordert jedoch auch, dass Sie benutzerdefinierte Logik in Ihre Anwendung implementieren, um das Verhalten eines Standardfensters zu emulieren.

WindowChrome

Zum Anpassen eines Fensters unter Beibehaltung der Standardfunktionen können Sie die WindowChrome-Klasse verwenden. Die WindowChrome-Klasse trennt die Funktionalität des Fensterrahmens von grafischen Elementen, so können Sie die Grenze zwischen dem Client- und dem Nicht-Clientbereich des Anwendungsfensters steuern. Die WindowChrome-Klasse ermöglicht es Ihnen, WPF-Inhalt in den Fensterrahmen einzufügen, indem Sie den Clientbereich erweitern, um den Nicht-Clientbereich abzudecken. Gleichzeitig wird das Systemverhalten durch zwei nicht sichtbare Bereiche beibehalten: die Bereiche Rahmengröße ändern und Beschriftung.

Es gibt zwei wesentliche Teile beim Erstellen eines benutzerdefinierten Fensters mithilfe der WindowChrome-Klasse. Zuerst passen Sie den Nicht-Clientbereich des Fensters an, indem Sie die Eigenschaften festlegen, die im WindowChrome-Objekt verfügbar gemacht werden. Anschließend stellen Sie eine Vorlage für das Fenster bereit, das den Teil der Anwendung definiert, die in den Nicht-Clientbereich erweitert wird. Die Eigenschaften, die im WindowChrome-Objekt verfügbar gemacht wurden, sind ResizeBorderThickness, CaptionHeight, CornerRadius und GlassFrameThickness.

Die ResizeBorderThickness-Eigenschaft gibt einen nicht sichtbaren Rahmen um das Anwendungsfenster herum an, mit dem der Benutzer per Klicken und Ziehen die Größe des Fensters anpassen kann.

Die CaptionHeight-Eigenschaft gibt einen nicht sichtbaren Bereich am oberen Fensterrand an, der das Verhalten des Systems aktiviert, das normalerweise der Titelleiste zugeordnet ist. Zu diesen Verhaltensweisen zählen folgende: Ziehen/Ablegen zum Verschieben des Fensters, Doppelklicken zum Maximieren des Fensters und Klicken mit der rechten Maustaste zum Anzeigen des Systemmenüs.

Die Größenanpassung und der Beschriftungsbereich enthalten keine visuellen Elemente; sie definieren nur Bereiche, die auf Eingabe reagieren und standardmäßiges vom System bereitgestelltes Fensterverhalten ermöglichen.

Die CornerRadius-Eigenschaft gibt den Grad an, um den die Ecken des Fensters abgerundet werden. Diese Eigenschaft hat keine Auswirkungen, wenn der Glasframe für ein Fenster aktiviert ist.

Die GlassFrameThickness-Eigenschaft gibt die Breite des Glasframe um das Fenster an. Standardmäßig wird der Systemwert verwendet, der durch die WindowNonClientFrameThickness-Eigenschaft angegeben wird, um die Darstellung eines Standardfensters zu emulieren. Wenn der Glasframe verwendet wird, sind Titelleistenschaltflächen für Minimieren, Maximieren und Schließen sichtbar und interaktiv. Die Anwendung ist für die Anzeige des Anwendungssymbols und Beschriftungstexts verantwortlich. Sie können die GlassFrameThickness-Eigenschaft festlegen, um den Glasframe schmaler oder breiter als den Standard zu machen.

WarnhinweisVorsicht

Die Größe der Titelleistenschaltflächen ändert sich nicht, wenn die GlassFrameThickness-Eigenschaft geändert wird.Wenn die Höhe des oberen Bereichs der Glasframe kleiner als die Höhe der Titelleistenschaltflächen ist, sind die Titelleistenschaltflächen nicht vollständig sichtbar.

Um ein benutzerdefiniertes Fenster ohne Glasframe zu erstellen, legen Sie die GlassFrameThickness-Eigenschaft auf einen einheitlichen Wert 0 fest. Dadurch werden die standardmäßigen Titelleistenschaltflächen deaktiviert und ausgeblendet.

Um den Glasframe zu erweitern, um das gesamte Fenster abzudecken, legen Sie die GlassFrameThickness-Eigenschaft auf einen negativen Wert auf jeder Seite fest. Wenn die GlassFrameThickness-Eigenschaft auf einen negativen Wert für jede Seite festgelegt wurde, ist ihr umgewandelter Wert gleich GlassFrameCompleteThickness.

HinweisHinweis

Aero ist ein Satz von optischen Verbesserungen für Aussehen und Funktionalität des Windows-Desktops, der in Windows Vista eingeführt wurde.Eine der visuell offensichtlicheren Funktionen von Aero sind lichtdurchlässiges Glasfensterrahmen.Windows Aero wird von der Funktion für die Desktopzusammensetzung des Desktopfenster-Managers (DWM) aktiviert.

Windows Aero-Glaseffekte werden nicht unter allen Betriebssystemen unterstützt und können unter unterstützten Betriebssystemen deaktiviert werden. Wenn Windows Aero nicht verfügbar ist, wird der Glasframe unabhängig vom GlassFrameThickness-Eigenschaftswert nicht angezeigt. Der von dieser Eigenschaft angegebene Grenzbereich wird stattdessen schwarz angezeigt. Überprüfen Sie die IsGlassEnabled-Eigenschaft, um sicherzustellen, dass Windows Aero-Glaseffekte verfügbar sind. Wenn Glaseffekte nicht verfügbar sind, sollten Sie einen alternativen Fensterstil bereitstellen, der nicht den Glasframe verwendet. Oder verwenden Sie das Standardfenster, indem Sie den Fensterstil auf NULL festlegen.

Erweitern Sie den WPF-Inhalt in den Fensterrahmen, indem Sie ein ControlTemplate-Element angeben, das die Darstellung und das Verhalten des Rahmeninhalts definiert. Sie legen TargetType von ControlTemplate auf den Typ des Fensters fest, das Sie anpassen.

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

Standardmäßig sind die Teile der visuellen Elemente, die innerhalb des Nicht-Clientbereichs des Fensters befinden, nicht interaktiv. Um interaktive Elemente im Nicht-Clientbereich zu aktivieren, fügen Sie die angefügte WindowsChrome.IsHitTestVisibleInChrome-Eigenschaft an das Element an, und legen Sie sie auf TRUE fest.

Das folgende XAML-Markup veranschaulicht die Hauptelemente, die zum Anpassen eines Fensters mithilfe der WindowChrome-Klasse erforderlich sind.

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

Der erste Setter fügt WindowChrome am Fenster an. Er verwendet alle Standardwerte für die WindowChrome-Eigenschaften, wodurch das Fenster wie ein Standardfenster aussieht.

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

Die Fenstervorlage muss eine Inhaltsdarstellung angeben, um den Inhalt des Fensters anzuzeigen, das in Ihrer Anwendung angegeben ist. Standardmäßig erweitert die WindowChrome-Klasse den Clientbereich, um den Nicht-Clientbereich einzuschließen. Um den Glasframe freizulegen, müssen Sie einen Rand um ContentPresenter angeben. Durch dieses Markup wird ein Rahmen mit einem weißen Hintergrund um die Inhaltsdarstellung angegeben, um die Darstellung eines Standardfensters zu emulieren. Außerdem wird ein Rand angegeben, der an die WindowNonClientFrameThickness-Eigenschaft gebunden ist, die die standardmäßige Systembreite für den Frame abruft.

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

Das Anwendungssymbol und der Titel werden durch die WindowChrome-Klasse nicht angezeigt. Sie müssen dem Rahmen als benutzerdefinierte Inhalte hinzugefügt werden. Der folgende XAML-Code fügt ein Bild und einen Textblock mit dem Symbol und dem Titel hinzu. Beide Elemente sind an die entsprechenden Eigenschaften im Fenster gebunden. Die Breite des Bildes wird an die SmallIconSize-Breite gebunden, die die standardmäßige Systemgröße für das Symbol erhält. Die angefügte IsHitTestVisibleInChrome-Eigenschaft wird auf dem Bild festgelegt, sodass es Mausereignisse empfangen kann.

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

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Siehe auch

Referenz

Microsoft.Windows.Shell-Namespace