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 класса main. Сначала настраивается неклиентская часть окна, задав свойства, предоставляемые объекту WindowChrome . Затем вы предоставляете шаблон для окна, определяющего часть приложения, которая распространяется на неклиентовую область. Для объекта доступны WindowChrome свойства , CaptionHeight, CornerRadiusи GlassFrameThickness.ResizeBorderThickness

Свойство ResizeBorderThickness задает невидимую границу за пределами окна приложения, которую пользователь может щелкнуть и перетащить для изменения размера окна.

Свойство CaptionHeight задает невидимую область в верхней части окна, которая обеспечивает поведение системы, обычно связанное с заголовком окна. К таким вариантам поведения относятся: щелчок и перетаскивание для перемещения окна, двойной щелчок, чтобы развернуть окно, и щелчок правой кнопкой мыши, чтобы отобразить системное меню.

Границы изменения размера и области подпись не содержат визуальных элементов; они определяют только области, которые реагируют на входные данные, и обеспечивают стандартное поведение окна, предоставляемое системой.

Свойство CornerRadius указывает, насколько скругляются углы окна. Это свойство не действует, если для окна включена стеклянная рамка.

Свойство GlassFrameThickness задает ширину стеклянной рамки вокруг окна. По умолчанию используется системное значение, заданное свойством WindowNonClientFrameThickness , для эмуляции внешнего вида стандартного окна. Когда используется стеклянная рамка, подпись кнопки Свернуть, Развернуть и Закрыть видны и интерактивны. Приложение отвечает за отображение значка приложения и подпись текста. Вы можете задать GlassFrameThickness свойство , чтобы сделать стеклянную рамку шире или более узкой, чем по умолчанию.

Внимание!

Размер кнопок подпись не изменяется при GlassFrameThickness изменении свойства. Если высота верхней части стеклянной рамки меньше высоты подпись кнопок, подпись кнопки не будут полностью видны.

Чтобы создать пользовательское окно без стеклянной рамки, присвойте свойству GlassFrameThickness равное однородное значение 0. При этом стандартные кнопки подпись будут отключены и скрыты.

Чтобы расширить стеклянную рамку, чтобы охватить все окно, задайте GlassFrameThickness для свойства отрицательное значение с любой стороны. Если свойству GlassFrameThickness присвоено отрицательное значение для любой стороны, его принуждать значение будет равно GlassFrameCompleteThickness.

Примечание

Aero — это набор визуальных улучшений внешнего вида и функциональных возможностей рабочего стола Windows, появившиеся в Windows Vista. Одной из самых очевидных особенностей Aero являются прозрачные стеклянные границы окон. 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 показаны main элементов, необходимых для настройки окна с помощью класса 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 значение true.

(Унаследовано от Freezable)
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)

Обеспечивает создание соответствующих указателей контекста для элемента данных типа DependencyObjectType, который был только что задан.

(Унаследовано от Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Этот элемент поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода.

(Унаследовано от 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)

Применяется к