WindowChrome Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Representa um objeto que descreve as personalizações na á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
Observações
A classe WindowChrome permite-lhe estender Windows Presentation Foundation conteúdo (WPF) para a área não cliente de uma janela, normalmente reservada para o gestor de janelas do sistema operativo.
Windows padrão
As janelas padrão são compostas por dois retângulos sobrepostos. O retângulo exterior é a área não-cliente, frequentemente referida como cromo. É desenhado e gerido pelo gestor de janelas do sistema operativo. As suas dimensões são determinadas pelas definições padrão do sistema operativo. O frame não-cliente fornece funcionalidades e comportamentos padrão da janela. Estas incluem botões de legenda (Minimizar, Maximizar e Fechar), a borda da janela, comportamentos de redimensionamento e movimento, o ícone e título da aplicação, e o menu do sistema. O retângulo interior é a área do cliente. Contém o conteúdo da sua candidatura, que é desenhada e gerida pela aplicação. Para mais informações sobre windows em aplicações WPF, consulte WPF Windows Visão Geral.
A ilustração seguinte mostra as partes de uma janela padrão.
Windows Personalizados
Podes personalizar a borda de uma janela definindo a Window.WindowStyle propriedade como None ou usando a WindowChrome classe.
WindowStyle.Nenhum
Uma forma de personalizar a aparência de uma janela de aplicação WPF é definir a propriedade Window.WindowStyle para None. Isto remove a moldura não-cliente da janela e deixa apenas a área do cliente, à qual pode aplicar um estilo personalizado. No entanto, quando o frame não-cliente é removido, também se perde as funcionalidades e comportamentos do sistema que ele proporciona, como botões de legenda e redimensionamento de janelas. Outro efeito secundário é que a janela cobre a barra de tarefas do Windows quando esta está maximizada. A definição WindowStyle.None permite-lhe criar uma aplicação completamente personalizada, mas também exige que implemente lógica personalizada na sua aplicação para emular o comportamento padrão das janelas.
WindowChrome
Para personalizar uma janela mantendo a sua funcionalidade padrão, pode usar a WindowChrome classe. A WindowChrome classe separa a funcionalidade da moldura da janela dos visuais e permite-lhe controlar a fronteira entre as áreas cliente e não cliente da sua janela de aplicação. A classe WindowChrome permite-lhe colocar WPF conteúdo na moldura da janela ao estender a área do cliente para cobrir a área não cliente. Ao mesmo tempo, mantém comportamentos do sistema através de duas áreas invisíveis; as áreas de redimensionamento da borda e legenda .
Existem duas partes principais para criar uma janela personalizada usando a WindowChrome classe. Primeiro, personaliza a parte não-cliente da janela definindo propriedades expostas no WindowChrome objeto. Depois fornece um modelo para a janela que define a parte da sua aplicação que está estendida para a área não cliente. As propriedades expostas no WindowChrome objeto são ResizeBorderThickness, CaptionHeight, CornerRadius, e GlassFrameThickness.
A ResizeBorderThickness propriedade especifica uma borda invisível em redor do exterior da janela da aplicação que o utilizador pode clicar e arrastar para redimensionar a janela.
A CaptionHeight propriedade especifica uma área invisível no topo da janela que permite comportamentos do sistema tipicamente associados à barra de título. Estes comportamentos incluem: clicar e arrastar para mover a janela, fazer duplo clique para maximizar a janela e clicar com o botão direito para mostrar o menu do sistema.
A borda de redimensionamento e a área da legenda não têm elementos visuais; Definem apenas áreas que respondem à entrada e permitem comportamentos padrão de janelas fornecidas pelo sistema.
A CornerRadius propriedade especifica a quantidade em que os cantos da janela são arredondados. Esta propriedade não tem qualquer efeito se a moldura de vidro estiver ativada para uma janela.
A GlassFrameThickness propriedade especifica a largura da moldura de vidro em redor da janela. Por defeito, utiliza o valor do sistema especificado pela WindowNonClientFrameThickness propriedade para emular a aparência de uma janela padrão. Quando a moldura de vidro é usada, os botões de legenda para Minimizar, Maximizar e Fechar são visíveis e interativos. A aplicação é responsável por exibir o ícone da aplicação e o texto da legenda. Podes definir a GlassFrameThickness propriedade para tornar a moldura de vidro mais larga ou mais estreita do que o padrão.
Atenção
O tamanho dos botões da legenda não muda quando a GlassFrameThickness propriedade é alterada. Se a altura do topo da moldura de vidro for inferior à altura dos botões de legenda, estes não serão completamente visíveis.
Para criar uma janela personalizada que não tenha uma moldura de vidro, defina a GlassFrameThickness propriedade para um valor uniforme de 0. Isto vai desativar e esconder os botões de legenda padrão.
Para estender a moldura de vidro para cobrir toda a janela, defina a GlassFrameThickness propriedade com valor negativo em qualquer lado. Quando a GlassFrameThickness propriedade é definida para um valor negativo para qualquer lado, o seu valor coagido será igual a GlassFrameCompleteThickness.
Note
O Aero é um conjunto de melhorias visuais ao aspeto e funcionalidade do ambiente de trabalho do Windows que foi introduzido no Windows Vista. Uma das características mais visivelmente óbvias do Aero são as bordas translúcidas de vidro das janelas. O Windows Aero é ativado pela funcionalidade de composição do ambiente de trabalho do Gestor de Janelas do Ambiente de Trabalho (DWM).
Os efeitos de vidro Windows Aero não são suportados em todos os sistemas operativos e podem ser desativados em sistemas operativos suportados. Se Windows Aero não estiver disponível, a moldura de vidro não será exibida independentemente do valor da propriedade GlassFrameThickness. A área da fronteira especificada por esta propriedade aparecerá a preto em vez disso. Verifique a propriedade IsGlassEnabled para garantir que Windows efeitos de vidro Aero estão disponíveis. Se os efeitos de vidro não estiverem disponíveis, deve fornecer um estilo alternativo de janela que não use a moldura de vidro ou usar a janela padrão definindo o estilo da janela como nulo.
Estende o seu conteúdo WPF para o frame da janela especificando um ControlTemplate que define a aparência e o comportamento do conteúdo do frame. Defines o TargetType do ControlTemplate para o tipo da janela que estás a personalizar.
<ControlTemplate TargetType="{x:Type local:MainWindow}">
Por defeito, as partes de quaisquer elementos visuais que estejam dentro da área não cliente da janela não são interativas. Para ativar elementos interativos na área não cliente, anexe a propriedade WindowsChrome.IsTestVisibleInChrome ao elemento e defina-a como true.
A marcação XAML seguinte mostra os principais elementos 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 levantador prende o WindowChrome à janela. Usa todos os valores predefinidos das propriedades do WindowChrome, o que faz com que a janela pareça uma janela normal.
<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 na sua aplicação. Por defeito, a classe WindowChrome estende a área do cliente para cobrir a fronteira não-cliente. Para descobrir a moldura de vidro, é necessário especificar uma margem em torno do ContentPresenter. Esta marcação especifica uma borda com fundo branco em redor do apresentador de conteúdo para emular a aparência de uma janela padrão. Também especifica uma margem que está vinculada à propriedade WindowNonClientFrameThickness, que obtém a largura padrão do sistema para o frame.
<Border Background="White"
Margin="{Binding Source={x:Static shell:SystemParameters2.Current}, Path=WindowNonClientFrameThickness}">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
O ícone e o título da aplicação não são apresentados pela classe WindowChrome; Têm de ser adicionadas à borda como conteúdo personalizado. O XAML seguinte adiciona uma imagem e um bloco de texto para mostrar o ícone e o título. Ambos os elementos estão ligados às propriedades correspondentes na janela. A largura da imagem está ligada à largura SmallIconSize, que obtém o tamanho padrão do sistema para o ícone. A propriedade associada IsHitTestVisibleInChrome está definida na imagem para que possa receber eventos do rato.
<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
| Name | Description |
|---|---|
| WindowChrome() |
Inicializa uma nova instância da WindowChrome classe. |
Campos
| Name | Description |
|---|---|
| CaptionHeightProperty |
Identifica a CaptionHeight propriedade de dependência. |
| CornerRadiusProperty |
Identifica a CornerRadius propriedade de dependência. |
| GlassFrameThicknessProperty |
Identifica a GlassFrameThickness propriedade de dependência. |
| IsHitTestVisibleInChromeProperty |
Identifica a IsHitTestVisibleInChrome propriedade de dependência. |
| NonClientFrameEdgesProperty |
Identifica a NonClientFrameEdges propriedade de dependência. |
| ResizeBorderThicknessProperty |
Identifica a ResizeBorderThickness propriedade de dependência. |
| ResizeGripDirectionProperty |
Identifica a ResizeGripDirection propriedade de dependência. |
| UseAeroCaptionButtonsProperty |
Identifica a UseAeroCaptionButtons propriedade de dependência. |
| WindowChromeProperty |
Identifica a WindowChrome propriedade de dependência. |
Propriedades
| Name | Description |
|---|---|
| CanFreeze |
Obtém um valor que indica se o objeto pode ser tornado inmodificável. (Herdado de Freezable) |
| CaptionHeight |
Obtém ou define a altura da área da legenda no topo de uma janela. |
| CornerRadius |
Obtém ou define um valor que indica a quantidade de arredondamento dos cantos de uma janela. |
| DependencyObjectType |
Obtém o DependencyObjectType que envolve o tipo CLR desta instância. (Herdado de DependencyObject) |
| Dispatcher |
Percebe o Dispatcher que isto 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 em redor de uma janela. |
| IsFrozen |
Recebe um valor que indica se o objeto é atualmente modificável. (Herdado de Freezable) |
| IsSealed |
Recebe um valor que indica se esta instância está atualmente selada (apenas leitura). (Herdado de DependencyObject) |
| NonClientFrameEdges |
Recebe ou define um valor que indica quais as arestas da moldura da janela que não pertencem ao cliente. |
| ResizeBorderThickness |
Recebe ou define um valor que indica a largura da borda usada para redimensionar uma janela. |
| UseAeroCaptionButtons |
Recebe ou define um valor que indica se o teste de acerto está ativado nos botões de legenda do Windows Aero. |
Propriedades Anexadas
| Name | Description |
|---|---|
| IsHitTestVisibleInChrome |
Representa um objeto que descreve as personalizações na área não cliente de uma janela. |
| ResizeGripDirection |
Representa um objeto que descreve as personalizações na área não cliente de uma janela. |
| WindowChrome |
Obtém ou define a instância de WindowChrome que está associada a uma janela. |
Métodos
| Name | Description |
|---|---|
| CheckAccess() |
Determina se o thread que chama 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 DependencyProperty identificador. (Herdado de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Limpa o valor local de uma propriedade de apenas leitura. O imóvel a ser limpo é especificado por um DependencyPropertyKey. (Herdado de DependencyObject) |
| Clone() |
Cria um clone modificável do Freezable, fazendo cópias profundas dos valores do objeto. Ao copiar as propriedades de dependência do objeto, este método copia expressões (que podem deixar de se resolver), mas não as animações nem os seus valores atuais. (Herdado de Freezable) |
| CloneCore(Freezable) |
Torna a instância um clone (cópia profunda) dos valores especificados Freezable usando valores base (não animados). (Herdado de Freezable) |
| CloneCurrentValue() |
Cria um clone modificável (cópia profunda) do Freezable usando os seus valores atuais. (Herdado de Freezable) |
| CloneCurrentValueCore(Freezable) |
Torna a instância um clone modificável (cópia profunda) do especificado Freezable usando valores atuais de propriedades. (Herdado de Freezable) |
| CoerceValue(DependencyProperty) |
Coage o valor da propriedade de dependência especificada. Isto é conseguido invocando qualquer CoerceValueCallback função especificada nos metadados da propriedade para a propriedade de dependência tal como existe na chamada DependencyObject. (Herdado de DependencyObject) |
| CreateInstance() |
Inicializa uma nova instância da Freezable classe. (Herdado de Freezable) |
| CreateInstanceCore() |
Cria uma nova instância da WindowChrome classe. |
| Equals(Object) |
Determina se um fornecido DependencyObject é equivalente à corrente DependencyObject. (Herdado de DependencyObject) |
| Freeze() |
Torna o objeto atual immodificável e define a sua IsFrozen propriedade como |
| FreezeCore(Boolean) |
Torna o Freezable objeto immodificável ou testa se pode ser tornado immodificável. (Herdado de Freezable) |
| GetAsFrozen() |
Cria uma cópia congelada do Freezable, usando valores base (não animados) da propriedade. Como 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 especificado Freezable usando valores base (não animados). (Herdado de Freezable) |
| GetCurrentValueAsFrozen() |
Cria uma cópia congelada do Freezable usando os valores atuais das propriedades. Como 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 especificado Freezable. Se o objeto tiver propriedades de dependência animadas, os seus valores animados atuais são copiados. (Herdado de Freezable) |
| GetHashCode() |
Obtém um código de hash para isto DependencyObject. (Herdado de DependencyObject) |
| GetIsHitTestVisibleInChrome(IInputElement) |
Obtém o valor da IsHitTestVisibleInChrome propriedade associada do elemento de entrada especificado. |
| GetLocalValueEnumerator() |
Cria um enumerador especializado para determinar quais as propriedades de dependência que têm valores localmente definidos neste DependencyObject. (Herdado de DependencyObject) |
| GetResizeGripDirection(IInputElement) |
Obtém o valor da ResizeGripDirection propriedade associada do elemento de entrada especificado. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetValue(DependencyProperty) |
Devolve o valor efetivo atual de uma propriedade de dependência nesta instância de um DependencyObject. (Herdado de DependencyObject) |
| GetWindowChrome(Window) |
Obtém o valor da WindowChrome propriedade anexada a partir do especificado Window. |
| InvalidateProperty(DependencyProperty) |
Reavalia o valor efetivo da propriedade de dependência especificada. (Herdado de DependencyObject) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| OnChanged() |
Chamada quando o objeto atual Freezable é modificado. (Herdado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Este membro suporta a infraestrutura Windows Presentation Foundation (WPF) e não foi concebido para ser usado diretamente a partir do seu código. (Herdado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Assegura que os apontadores de contexto apropriados são estabelecidos para um DependencyObjectType membro de dados que acabou de ser definido. (Herdado de Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Sobrepõe a DependencyObject implementação de OnPropertyChanged(DependencyPropertyChangedEventArgs) para também invocar quaisquer Changed manipuladores em resposta a uma alteração da propriedade de dependência do tipo Freezable. (Herdado de Freezable) |
| ReadLocalValue(DependencyProperty) |
Devolve o valor local de uma propriedade de dependência, se esta existir. (Herdado de DependencyObject) |
| ReadPreamble() |
Garante que está a ser acedido Freezable a partir de um thread válido. Os herdeiros de Freezable devem chamar este método no início de qualquer API que leia membros de dados que não são propriedades de dependência. (Herdado de Freezable) |
| SetCurrentValue(DependencyProperty, Object) |
Define o valor de uma propriedade de dependência sem alterar a sua fonte de valor. (Herdado de DependencyObject) |
| SetIsHitTestVisibleInChrome(IInputElement, Boolean) |
Define o valor da IsHitTestVisibleInChrome propriedade associada no elemento de entrada especificado. |
| SetResizeGripDirection(IInputElement, ResizeGripDirection) |
Define o valor da ResizeGripDirection propriedade associada no elemento de entrada especificado. |
| SetValue(DependencyProperty, Object) |
Define o valor local de uma propriedade de dependência, especificado pelo seu identificador de propriedade de dependência. (Herdado de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Define o valor local de uma propriedade de dependência somente de leitura, especificado pelo DependencyPropertyKey identificador da propriedade de dependência. (Herdado de DependencyObject) |
| SetWindowChrome(Window, WindowChrome) |
Define o valor da WindowChrome propriedade anexada no especificado Window. |
| ShouldSerializeProperty(DependencyProperty) |
Devolve um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida. (Herdado de DependencyObject) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
| VerifyAccess() |
Faz cumprir que o thread que chama tem acesso a este DispatcherObject. (Herdado de DispatcherObject) |
| WritePostscript() |
Eleva o Changed evento para o Freezable e invoca o seu OnChanged() método. As classes que derivam de Freezable devem chamar este método no final de qualquer API que modifique membros de classe que não estejam armazenados como propriedades de dependência. (Herdado de Freezable) |
| WritePreamble() |
Verifica se o Freezable não está congelado e que está a ser acedido a partir de um contexto de threading válido. Freezable os herdeiros devem chamar este método no início de qualquer API que escreva para membros de dados que não sejam propriedades de dependência. (Herdado de Freezable) |
evento
| Name | Description |
|---|---|
| Changed |
Ocorre quando o Freezable ou um objeto que contém é modificado. (Herdado de Freezable) |