WindowChrome Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa um objeto que descreve as personalizações para a área não cliente de uma janela.
public ref class WindowChrome : System::Windows::Freezable
public class WindowChrome : System.Windows.Freezable
type WindowChrome = class
inherit Freezable
Public Class WindowChrome
Inherits Freezable
- Herança
Comentários
A WindowChrome classe permite estender o conteúdo de Windows Presentation Foundation (WPF) para a área não cliente de uma janela que normalmente é reservada para o gerenciador de janelas do sistema operacional.
Windows padrão
As janelas padrão são compostas por dois retângulos sobrepostos. O retângulo externo é a área não cliente, que geralmente é conhecida como cromo. Ele é desenhado e gerenciado pelo gerenciador de janelas do sistema operacional. Suas dimensões são determinadas pelas configurações padrão do sistema operacional. O quadro não cliente fornece recursos e comportamentos de janela padrão. Eles incluem botões legenda (Minimizar, Maximizar e Fechar), a borda da janela, os comportamentos de redimensionamento e movimentação, o ícone e o título do aplicativo e o menu do sistema. O retângulo interno é a área do cliente. Ele contém o conteúdo do aplicativo e é desenhado e gerenciado pelo aplicativo. Para obter mais informações sobre janelas em aplicativos WPF, consulte Visão geral do Windows do WPF.
A ilustração a seguir mostra as partes de uma janela padrão.
Windows personalizado
Você pode personalizar uma borda de janela definindo a Window.WindowStyle propriedade como None ou usando a WindowChrome classe .
WindowStyle.None
Uma maneira de personalizar a aparência de uma janela de aplicativo WPF é definir a Window.WindowStyle propriedade como None. Isso remove o quadro não cliente da janela e deixa apenas a área do cliente, à qual você pode aplicar um estilo personalizado. No entanto, quando o quadro não cliente é removido, você também perde os recursos e comportamentos do sistema que ele fornece, como botões de legenda e redimensionamento de janela. Outro efeito colateral é que a janela cobrirá a barra de tarefas do Windows quando for maximizada. A configuração WindowStyle.None permite que você crie um aplicativo completamente personalizado, mas também exige que você implemente a lógica personalizada em seu aplicativo para emular o comportamento de janela padrão.
WindowChrome
Para personalizar uma janela mantendo sua funcionalidade padrão, você pode usar a WindowChrome classe . A WindowChrome classe separa a funcionalidade do quadro de janela dos visuais e permite controlar o limite entre as áreas cliente e não cliente da janela do aplicativo. A WindowChrome classe permite que você coloque o conteúdo do WPF no quadro da janela estendendo a área do cliente para cobrir a área não cliente. Ao mesmo tempo, ele retém comportamentos do sistema por meio de duas áreas invisíveis; as áreas de borda de redimensionamento e legenda.
Há duas main partes para criar uma janela personalizada usando a WindowChrome classe . Primeiro, você personaliza a parte não cliente da janela definindo as propriedades expostas no WindowChrome objeto . Em seguida, você fornece um modelo para a janela que define a parte do aplicativo estendida para a área não cliente. As propriedades expostas no WindowChrome objeto são ResizeBorderThickness, CaptionHeight, CornerRadiuse GlassFrameThickness.
A ResizeBorderThickness propriedade especifica uma borda invisível ao redor do lado de fora da janela do aplicativo que o usuário pode clicar e arrastar para redimensionar a janela.
A CaptionHeight propriedade especifica uma área invisível na parte superior da janela que permite comportamentos do sistema normalmente associados à barra de título. Esses comportamentos incluem: clique e arraste para mover a janela, clique duas vezes para maximizar a janela e clique com o botão direito do mouse para mostrar o menu do sistema.
A borda de redimensionamento e a área legenda não têm elementos visuais; eles definem apenas áreas que respondem à entrada e habilitam comportamentos de janela padrão fornecidos pelo sistema.
A CornerRadius propriedade especifica a quantidade que os cantos da janela são arredondados. Essa propriedade não terá nenhum efeito se o quadro de vidro estiver habilitado para uma janela.
A GlassFrameThickness propriedade especifica a largura do quadro de vidro ao redor da janela. Por padrão, ele usa o valor do sistema especificado pela WindowNonClientFrameThickness propriedade para emular a aparência de uma janela padrão. Quando o quadro de vidro é usado, os botões legenda para Minimizar, Maximizar e Fechar são visíveis e interativos. O aplicativo é responsável por exibir o ícone do aplicativo e legenda texto. Você pode definir a GlassFrameThickness propriedade para tornar o quadro de vidro mais largo ou mais estreito do que o padrão.
Cuidado
O tamanho dos botões de legenda não é alterado quando a GlassFrameThickness propriedade é alterada. Se a altura da parte superior do quadro de vidro for menor que a altura dos botões legenda, os botões legenda não ficarão completamente visíveis.
Para criar uma janela personalizada que não tenha um quadro de vidro, defina a GlassFrameThickness propriedade como um valor uniforme de 0. Isso desabilitará e ocultará os botões de legenda padrão.
Para estender o quadro de vidro para cobrir toda a janela, defina a GlassFrameThickness propriedade como um valor negativo em qualquer lado. Quando a GlassFrameThickness propriedade é definida como um valor negativo para qualquer lado, seu valor coagido será igual a GlassFrameCompleteThickness.
Observação
O Aero é um conjunto de aprimoramentos visuais para a aparência e a funcionalidade da área de trabalho do Windows que foi introduzida no Windows Vista. Uma das características mais visualmente óbvias do Aero são as bordas de janela de vidro translúcidas. O Windows Aero é habilitado pelo recurso de composição da área de trabalho do DWM (Gerenciador de Janelas da Área de Trabalho).
Não há suporte para efeitos de vidro do Windows Aero em todos os sistemas operacionais e podem ser desabilitados em sistemas operacionais com suporte. Se o Windows Aero não estiver disponível, o quadro de vidro não será exibido independentemente do valor da GlassFrameThickness propriedade. A área de borda especificada por essa propriedade aparecerá preta. Verifique a IsGlassEnabled propriedade para verificar se os efeitos de vidro do Windows Aero estão disponíveis. Se os efeitos de vidro não estiverem disponíveis, você deverá fornecer um estilo de janela alternativo que não use o quadro de vidro ou use a janela padrão definindo o estilo da janela como nulo.
Estenda o conteúdo do WPF para o quadro de janela especificando um ControlTemplate que define a aparência e o comportamento do conteúdo do quadro. Você define o TargetType do ControlTemplate como o tipo da janela que você está personalizando.
<ControlTemplate TargetType="{x:Type local:MainWindow}">
Por padrão, as partes de todos os elementos visuais que estão dentro da área não cliente da janela não são interativas. Para habilitar elementos interativos na área não cliente, anexe a propriedade anexada WindowsChrome.IsHitTestVisibleInChrome ao elemento e defina-a como true.
A marcação XAML a seguir mostra os elementos main necessários para personalizar uma janela usando a classe 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>
O primeiro setter anexa o WindowChrome à janela. Ele usa todos os valores padrão para as propriedades WindowChrome, o que faz com que a janela pareça uma janela padrão.
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome />
</Setter.Value>
</Setter>
O modelo de janela deve especificar um apresentador de conteúdo para exibir o conteúdo da janela especificada em seu aplicativo. Por padrão, a classe WindowChrome estende a área do cliente para cobrir a borda não cliente. Para descobrir o quadro de vidro, você precisa especificar uma margem ao redor do ContentPresenter. Essa marcação especifica uma borda com um plano de fundo branco ao redor do apresentador de conteúdo para emular a aparência de uma janela padrão. Ele também especifica uma margem associada à propriedade WindowNonClientFrameThickness, que obtém a largura padrão do sistema para o quadro.
<Border Background="White"
Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
O ícone e o título do aplicativo não são exibidos pela classe WindowChrome; eles precisam ser adicionados à borda como conteúdo personalizado. O XAML a seguir adiciona uma imagem e um bloco de texto para exibir o ícone e o título. Ambos os elementos estão associados às propriedades correspondentes na janela. A largura da imagem está associada à largura SmallIconSize, que obtém o tamanho padrão do sistema para o ícone. A propriedade anexada IsHitTestVisibleInChrome é definida na imagem para que ela possa receber eventos do mouse.
<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"/>
Construtores
WindowChrome() |
Inicializa uma nova instância da classe WindowChrome. |
Campos
CaptionHeightProperty |
Identifica a propriedade de dependência CaptionHeight. |
CornerRadiusProperty |
Identifica a propriedade de dependência CornerRadius. |
GlassFrameThicknessProperty |
Identifica a propriedade de dependência GlassFrameThickness. |
IsHitTestVisibleInChromeProperty |
Identifica a propriedade de dependência IsHitTestVisibleInChrome. |
NonClientFrameEdgesProperty |
Identifica a propriedade de dependência NonClientFrameEdges. |
ResizeBorderThicknessProperty |
Identifica a propriedade de dependência ResizeBorderThickness. |
ResizeGripDirectionProperty |
Identifica a propriedade de dependência ResizeGripDirection. |
UseAeroCaptionButtonsProperty |
Identifica a propriedade de dependência UseAeroCaptionButtons. |
WindowChromeProperty |
Identifica a propriedade de dependência WindowChrome. |
Propriedades
CanFreeze |
Obtém um valor que indica se o objeto pode se tornar não modificável. (Herdado de Freezable) |
CaptionHeight |
Obtém ou define a altura da área de legenda na parte superior de uma janela. |
CornerRadius |
Obtém ou define um valor que indica a quantidade em que os cantos de uma janela são arredondados. |
DependencyObjectType |
Obtém o DependencyObjectType que encapsula o tipo CLR dessa instância. (Herdado de DependencyObject) |
Dispatcher |
Obtém o Dispatcher ao qual este DispatcherObject está associado. (Herdado de DispatcherObject) |
GlassFrameCompleteThickness |
Obtém uma espessura uniforme de -1. |
GlassFrameThickness |
Obtém ou define um valor que indica a largura da borda de vidro ao redor de uma janela. |
IsFrozen |
Obtém um valor que indica se o objeto pode ser modificado no momento. (Herdado de Freezable) |
IsSealed |
Obtém um valor que indica se essa instância está validada no momento (somente leitura). (Herdado de DependencyObject) |
NonClientFrameEdges |
Obtém ou define um valor que indica quais bordas do quadro de janela não pertencem ao cliente. |
ResizeBorderThickness |
Obtém ou define um valor que indica a largura da borda que é usada para redimensionar a janela. |
UseAeroCaptionButtons |
Obtém ou define um valor que indica se o teste de clique está habilitado nos botões de legenda do Windows Aero. |
Propriedades Anexadas
IsHitTestVisibleInChrome |
Representa um objeto que descreve as personalizações para a área não cliente de uma janela. |
ResizeGripDirection |
Representa um objeto que descreve as personalizações para a área não cliente de uma janela. |
WindowChrome |
Obtém ou define a instância do WindowChrome anexado a uma janela. |
Métodos
CheckAccess() |
Determina se o thread de chamada tem acesso a este DispatcherObject. (Herdado de DispatcherObject) |
ClearValue(DependencyProperty) |
Limpa o valor local de uma propriedade. A propriedade a ser limpa é especificada por um identificador DependencyProperty. (Herdado de DependencyObject) |
ClearValue(DependencyPropertyKey) |
Limpa o valor local de uma propriedade somente leitura. A propriedade a ser limpa é especificada por um DependencyPropertyKey. (Herdado de DependencyObject) |
Clone() |
Cria um clone modificável do Freezable, fazendo cópias em profundidade dos valores do objeto. Ao copiar as propriedades de dependência do objeto, esse método copia as expressões (que talvez não possam mais ser resolvidas), mas não as animações nem seus valores atuais. (Herdado de Freezable) |
CloneCore(Freezable) |
Faz com que a instância seja um clone (cópia em profundidade) do Freezable especificado usando valores de propriedade base (não animados). (Herdado de Freezable) |
CloneCurrentValue() |
Cria um clone modificável (cópia profunda) do Freezable usando seus valores atuais. (Herdado de Freezable) |
CloneCurrentValueCore(Freezable) |
Torna a instância um clone modificável (cópia em profundidade) do Freezable especificado usando os valores de propriedade atuais. (Herdado de Freezable) |
CoerceValue(DependencyProperty) |
Converte o valor da propriedade de dependência especificada. Isso é feito invocando qualquer função CoerceValueCallback especificada nos metadados de propriedade para a propriedade de dependência, visto que ela existe na chamada a DependencyObject. (Herdado de DependencyObject) |
CreateInstance() |
Inicializa uma nova instância da classe Freezable. (Herdado de Freezable) |
CreateInstanceCore() |
Cria uma nova instância da classe WindowChrome. |
Equals(Object) |
Determina se um DependencyObject fornecido é equivalente ao DependencyObject atual. (Herdado de DependencyObject) |
Freeze() |
Torna o objeto atual não modificável e define sua propriedade IsFrozen para |
FreezeCore(Boolean) |
Torna o objeto Freezable não modificável ou testa se ele pode ser transformado em não modificável. (Herdado de Freezable) |
GetAsFrozen() |
Cria uma cópia congelada o Freezable usando valores de propriedade base (não animadas). Já que a cópia está congelada, quaisquer subobjetos congelados são copiados por referência. (Herdado de Freezable) |
GetAsFrozenCore(Freezable) |
Torna a instância um clone congelado do Freezable especificado usando valores de propriedade base (não animados). (Herdado de Freezable) |
GetCurrentValueAsFrozen() |
Cria uma cópia congelada do Freezable usando valores de propriedade atuais. Já que a cópia está congelada, quaisquer subobjetos congelados são copiados por referência. (Herdado de Freezable) |
GetCurrentValueAsFrozenCore(Freezable) |
Torna a instância atual um clone congelado do Freezable especificado. Se o objeto tiver propriedades de dependência animadas, seus valores animados atuais serão copiados. (Herdado de Freezable) |
GetHashCode() |
Obtém o código hash para esse DependencyObject. (Herdado de DependencyObject) |
GetIsHitTestVisibleInChrome(IInputElement) |
Obtém o valor da propriedade anexada IsHitTestVisibleInChrome do elemento de entrada especificado. |
GetLocalValueEnumerator() |
Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente nessa DependencyObject. (Herdado de DependencyObject) |
GetResizeGripDirection(IInputElement) |
Obtém o valor da propriedade anexada ResizeGripDirection do elemento de entrada especificado. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
GetValue(DependencyProperty) |
Retorna o valor efetivo atual de uma propriedade de dependência nessa instância de um DependencyObject. (Herdado de DependencyObject) |
GetWindowChrome(Window) |
Obtém o valor da propriedade anexada WindowChrome da Window especificada. |
InvalidateProperty(DependencyProperty) |
Reavalia o valor efetivo para a propriedade de dependência especificada. (Herdado de DependencyObject) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
OnChanged() |
Chamado quando o objeto Freezable atual é modificado. (Herdado de Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Garante que os ponteiros de contexto apropriados sejam estabelecidos para um membro de dados DependencyObjectType que foi recém-definido. (Herdado de Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Esse membro dá suporte à infraestrutura de Windows Presentation Foundation (WPF) e não se destina a ser usado diretamente do seu código. (Herdado de Freezable) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Substitui a implementação DependencyObject de OnPropertyChanged(DependencyPropertyChangedEventArgs) para também invocar quaisquer manipuladores Changed em resposta à alteração de uma propriedade de dependência do tipo Freezable. (Herdado de Freezable) |
ReadLocalValue(DependencyProperty) |
Retorna o valor local de uma propriedade de dependência, local, se houver. (Herdado de DependencyObject) |
ReadPreamble() |
Garante que o Freezable esteja sendo acessado de um thread válido. Herdeiros do Freezable devem chamar esse método no início de qualquer API que lê membros de dados que não são propriedades de dependência. (Herdado de Freezable) |
SetCurrentValue(DependencyProperty, Object) |
Define o valor da propriedade de dependência sem alterar a origem do valor. (Herdado de DependencyObject) |
SetIsHitTestVisibleInChrome(IInputElement, Boolean) |
Define o valor da propriedade anexada IsHitTestVisibleInChrome no elemento de entrada especificado. |
SetResizeGripDirection(IInputElement, ResizeGripDirection) |
Define o valor da propriedade anexada ResizeGripDirection no elemento de entrada especificado. |
SetValue(DependencyProperty, Object) |
Define o valor local de uma propriedade de dependência, especificada pelo identificador da propriedade de dependência. (Herdado de DependencyObject) |
SetValue(DependencyPropertyKey, Object) |
Define o valor de uma propriedade de dependência somente leitura, especificada pelo identificador DependencyPropertyKey da propriedade de dependência. (Herdado de DependencyObject) |
SetWindowChrome(Window, WindowChrome) |
Define o valor da propriedade anexada WindowChrome na Window especificada. |
ShouldSerializeProperty(DependencyProperty) |
Retorna um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida. (Herdado de DependencyObject) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
VerifyAccess() |
Impõe que o thread de chamada tenha acesso a este DispatcherObject. (Herdado de DispatcherObject) |
WritePostscript() |
Aciona o evento Changed para o Freezable e invoca o respectivo método OnChanged(). Classes que derivam de Freezable devem chamar este método no final de qualquer API que modifica os membros de classe que não são armazenados como propriedades de dependência. (Herdado de Freezable) |
WritePreamble() |
Verifica se o Freezable não está congelado e está sendo acessado de um contexto de threading válido. Herdeiros do Freezable devem chamar esse método no início de qualquer API que grava em membros de dados que não são propriedades de dependência. (Herdado de Freezable) |
Eventos
Changed |
Ocorre quando o Freezable ou um objeto nele contido é modificado. (Herdado de Freezable) |