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) в не клиентской области окна, которое обычно зарезервировано для диспетчера окон операционной системы.
Стандартные windows
Стандартные окна состоят из двух перекрывающихся прямоугольников. Внешний прямоугольник является не клиентской областью, которая часто называется хрома. Он рисуется и управляется диспетчером окон операционной системы. Его размеры определяются стандартными параметрами операционной системы. Фрейм, отличный от клиента, предоставляет стандартные функции и поведение окна. К ним относятся кнопки заголовка (свернуть, развернуть и закрыть), границу окна, изменить размер и переместить поведение, значок приложения и название, а также системное меню. Внутренний прямоугольник — это клиентская область. Он содержит содержимое приложения, и оно рисуется и управляется приложением. Дополнительные сведения о окнах в приложениях WPF см. в разделе "Обзор Windows WPF".
На следующем рисунке показаны части стандартного окна.
Пользовательские окна
Границу окна можно настроить, задав Window.WindowStyle для свойства значение None или с помощью WindowChrome класса.
WindowStyle.None
Один из способов настройки внешнего вида окна приложения WPF — задать Window.WindowStyle для свойства значение None. Это удаляет кадр, отличный от клиента, из окна и оставляет только клиентскую область, к которой можно применить пользовательский стиль. Однако при удалении фрейма, отличного от клиента, вы также теряете системные функции и поведение, предоставляемые им, например кнопки заголовка и изменение размера окна. Еще один побочный эффект заключается в том, что окно будет охватывать панель задач Windows при его максимальном расположении. Параметр WindowStyle.None позволяет создавать полностью пользовательское приложение, но также требует реализации пользовательской логики в приложении для эмуляции стандартного поведения окна.
WindowChrome
Чтобы настроить окно при сохранении стандартной функциональности, можно использовать WindowChrome класс. Класс WindowChrome отделяет функциональные возможности фрейма окна от визуальных элементов и позволяет контролировать границу между клиентскими и не клиентскими областями окна приложения. Класс WindowChrome позволяет поместить содержимое WPF в рамку окна, расширив клиентская область для покрытия не клиентской области. В то же время она сохраняет системное поведение через две невидимые области; области изменения размера границы и заголовка .
Существует две основные части для создания настраиваемого WindowChrome окна с помощью класса. Во-первых, вы настраиваете часть окна, отличной от клиента, задав свойства, предоставляемые в объекте WindowChrome . Затем вы предоставляете шаблон для окна, определяющего часть приложения, которая расширяется в не клиентской области. Свойства, предоставляемые для WindowChrome объекта, CaptionHeight: ResizeBorderThicknessи CornerRadiusGlassFrameThickness.
Свойство ResizeBorderThickness указывает невидимую границу вокруг внешнего окна приложения, которую пользователь может щелкнуть и перетащить, чтобы изменить размер окна.
Свойство CaptionHeight задает невидимую область в верхней части окна, которая позволяет системным поведением, обычно связанным с строкой заголовка. К этим действиям относятся: щелкните и перетащите окно, дважды щелкните, чтобы развернуть окно, и щелкните правой кнопкой мыши, чтобы отобразить системное меню.
Область изменения размера границы и заголовка не имеет визуальных элементов; они определяют только области, которые реагируют на входные данные и обеспечивают стандартное системное поведение окна.
Свойство CornerRadius указывает количество округления углов окна. Это свойство не имеет никакого эффекта, если стеклянная рамка включена для окна.
Свойство GlassFrameThickness задает ширину стеклянной рамки вокруг окна. По умолчанию для эмулирования внешнего вида стандартного окна используется системное значение, указанное WindowNonClientFrameThickness свойством. При использовании стеклянной рамки кнопки заголовка для "Свернуть", "Развернуть" и "Закрыть" отображаются и интерактивны. Приложение отвечает за отображение значка приложения и текста заголовка. Вы можете задать GlassFrameThickness свойство, чтобы сделать стеклянную рамку более широкой или более узкой, чем по умолчанию.
Предостережение
Размер кнопок заголовка не изменяется при GlassFrameThickness изменении свойства. Если высота верхней части стеклянной рамки меньше высоты кнопок заголовка, кнопки заголовка не будут полностью видимы.
Чтобы сделать пользовательское окно без стеклянной рамки, задайте GlassFrameThickness для свойства однородное значение 0. Это отключает и скрывает стандартные кнопки заголовка.
Чтобы расширить стеклянную рамку для покрытия всего окна, задайте GlassFrameThickness свойству отрицательное значение на любой стороне. GlassFrameThickness Если свойству присвоено отрицательное значение для любой стороны, его принудительное значение будет равноGlassFrameCompleteThickness.
Замечание
Aero — это набор визуальных улучшений для внешнего вида и функциональности рабочего стола Windows, который был представлен в Windows Vista. Одной из самых очевидных особенностей Аэро является полупрозрачные границы стекла окна. Windows Aero включена функцией композиции рабочего стола диспетчера окон рабочего стола (DWM).
Эффекты windows Aero не поддерживаются во всех операционных системах и могут быть отключены в поддерживаемых операционных системах. Если Windows Aero недоступен, стеклянная рамка не будет отображаться независимо от GlassFrameThickness значения свойства. Область границы, указанная этим свойством, будет отображаться черной. Проверьте свойство, чтобы убедиться, IsGlassEnabled что доступны эффекты стекла Windows Aero. Если эффекты стекла недоступны, следует указать альтернативный стиль окна, который не использует стеклянную рамку или использовать стандартное окно, установив для стиля окна значение NULL.
Содержимое WPF расширяется в рамке окна путем указания элемента ControlTemplate, определяющего внешний вид и поведение содержимого кадра. TargetType элемента ControlTemplate присваивается типу настраиваемого окна.
<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) |
Принуждает значение указанного свойства зависимостей. Это достигается путем вызова любой 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() |
Создает замороженную копию с использованием текущих значений 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, DependencyProperty) |
Этот член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода. (Унаследовано от Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Убедитесь, что для элемента данных, который только что был установлен, установлены DependencyObjectType соответствующие указатели контекста. (Унаследовано от Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Переопределяет DependencyObject реализацию OnPropertyChanged(DependencyPropertyChangedEventArgs) для вызова всех Changed обработчиков в ответ на изменение свойства зависимостей типа Freezable. (Унаследовано от 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) |
Задает значение присоединенного WindowChrome свойства в указанном Windowобъекте. |
| ShouldSerializeProperty(DependencyProperty) |
Возвращает значение, указывающее, должны ли процессы сериализации сериализовать значение для указанного свойства зависимостей. (Унаследовано от DependencyObject) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| VerifyAccess() |
Принудительно применяет, что вызывающий поток имеет доступ к этому DispatcherObject. (Унаследовано от DispatcherObject) |
| WritePostscript() |
Changed Вызывает событие для Freezable метода и вызывает его OnChanged() метод. Классы, производные от Freezable этого метода, должны вызываться в конце любого API, который изменяет элементы класса, которые не хранятся в качестве свойств зависимостей. (Унаследовано от Freezable) |
| WritePreamble() |
Проверяет, что Freezable он не заморожен и к нему осуществляется доступ из допустимого контекста потоков. Freezable наследующие метод должны вызывать этот метод в начале любого API, записывающего элементы данных, которые не являются свойствами зависимостей. (Унаследовано от Freezable) |
События
| Имя | Описание |
|---|---|
| Changed |
Происходит при Freezable изменении объекта или объекта, содержащего его. (Унаследовано от Freezable) |