Compartilhar via


WindowChrome Classe

Definição

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 que você estenda o conteúdo do WPF (Windows Presentation Foundation) para a área não cliente de uma janela 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 que 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 de legenda (Minimizar, Maximizar e Fechar), a borda da janela, redimensionar e mover comportamentos, 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 a Visão geral do Windows do WPF.

A ilustração a seguir mostra as partes de uma janela padrão.

Elementos

Janelas personalizadas

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 do 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 padrão da janela.

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 os comportamentos do sistema por meio de duas áreas invisíveis; as áreas de borda e legenda de redimensionamento.

Há duas partes principais 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 que é estendida para a área não cliente. As propriedades expostas no WindowChrome objeto são ResizeBorderThickness, CaptionHeighte CornerRadiusGlassFrameThickness.

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 de legenda não têm elementos visuais; elas definem apenas as á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á 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 de legenda para Minimizar, Maximizar e Fechar são visíveis e interativos. O aplicativo é responsável por exibir o ícone do aplicativo e o texto da legenda. 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 de legenda, os botões de legenda não estarão completamente visíveis.

Para criar uma janela personalizada que não tenha uma estrutura 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 é as bordas da janela de vidro translúcida. 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. Em vez disso, a área de borda especificada por essa propriedade será 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 da janela especificando um ControlTemplate que define a aparência e o comportamento do conteúdo do quadro. Defina 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 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 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 em torno 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 do sistema padrão 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

Nome Description
WindowChrome()

Inicializa uma nova instância da classe WindowChrome.

Campos

Nome 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

Nome 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 de legenda na parte superior de uma janela.

CornerRadius

Obtém ou define um valor que indica a quantidade 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 que 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 é modificável no momento.

(Herdado de Freezable)
IsSealed

Obtém um valor que indica se essa instância está lacrada 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 usada para redimensionar uma janela.

UseAeroCaptionButtons

Obtém ou define um valor que indica se o teste de ocorrência está habilitado nos botões de legenda do Windows Aero.

Propriedades Anexadas

Nome Description
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 da WindowChrome qual está anexada a uma janela.

Métodos

Nome Description
CheckAccess()

Determina se o thread de chamada tem acesso a isso DispatcherObject.

(Herdado de DispatcherObject)
ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade. A propriedade a ser desmarcada é especificada por um DependencyProperty identificador.

(Herdado de DependencyObject)
ClearValue(DependencyPropertyKey)

Limpa o valor local de uma propriedade somente leitura. A propriedade a ser desmarcada é especificada 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, esse método copia expressões (que podem não ser mais resolvidas), mas não animações ou seus valores atuais.

(Herdado de Freezable)
CloneCore(Freezable)

Torna a instância um clone (cópia profunda) dos valores de propriedade base (não animados) especificados Freezable .

(Herdado de Freezable)
CloneCurrentValue()

Cria um clone modificável (cópia profunda) do uso de Freezable seus valores atuais.

(Herdado de Freezable)
CloneCurrentValueCore(Freezable)

Torna a instância um clone modificável (cópia profunda) do especificado Freezable usando valores de propriedade atuais.

(Herdado de Freezable)
CoerceValue(DependencyProperty)

Coagi o valor da propriedade de dependência especificada. Isso é feito invocando qualquer CoerceValueCallback função especificada nos metadados de propriedade para a propriedade de dependência como ela existe na chamada DependencyObject.

(Herdado de DependencyObject)
CreateInstance()

Inicializa uma nova instância da classe Freezable.

(Herdado de Freezable)
CreateInstanceCore()

Cria uma nova instância da WindowChrome classe.

Equals(Object)

Determina se um fornecido DependencyObject é equivalente ao atual DependencyObject.

(Herdado de DependencyObject)
Freeze()

Torna o objeto atual inmodificável e define sua IsFrozen propriedade como true.

(Herdado de Freezable)
FreezeCore(Boolean)

Torna o Freezable objeto inmodificável ou testa se ele pode se tornar não modificável.

(Herdado de Freezable)
GetAsFrozen()

Cria uma cópia congelada dos valores de Freezablepropriedade base (não animados). Como a cópia está congelada, todos os sub-objetos congelados são copiados por referência.

(Herdado de Freezable)
GetAsFrozenCore(Freezable)

Torna a instância um clone congelado dos valores de propriedade base (não animados) especificados Freezable .

(Herdado de Freezable)
GetCurrentValueAsFrozen()

Cria uma cópia congelada do Freezable uso de valores de propriedade atuais. Como a cópia está congelada, todos os sub-objetos 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, seus valores animados atuais serão copiados.

(Herdado de Freezable)
GetHashCode()

Obtém um código hash para isso DependencyObject.

(Herdado de DependencyObject)
GetIsHitTestVisibleInChrome(IInputElement)

Obtém o valor da IsHitTestVisibleInChrome propriedade anexada do elemento de entrada especificado.

GetLocalValueEnumerator()

Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente.DependencyObject

(Herdado de DependencyObject)
GetResizeGripDirection(IInputElement)

Obtém o valor da ResizeGripDirection propriedade anexada 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 nesta instância de um DependencyObject.

(Herdado de DependencyObject)
GetWindowChrome(Window)

Obtém o valor da WindowChrome propriedade anexada 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 Objectatual.

(Herdado de Object)
OnChanged()

Chamado quando o objeto atual Freezable é modificado.

(Herdado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Esse membro dá suporte à infraestrutura do WPF (Windows Presentation Foundation) e não se destina a ser usado diretamente do seu código.

(Herdado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Garante que os ponteiros de contexto apropriados sejam estabelecidos para um DependencyObjectType membro de dados que acabou de ser definido.

(Herdado de Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Substitui a DependencyObject implementação de OnPropertyChanged(DependencyPropertyChangedEventArgs) invocar também os Changed manipuladores em resposta a uma propriedade de dependência de alteração do tipo Freezable.

(Herdado de Freezable)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, se ela existir.

(Herdado de DependencyObject)
ReadPreamble()

Garante que ele Freezable esteja sendo acessado de um thread válido. Os herdadores devem Freezable chamar esse método no início de qualquer API que leia os 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 sua fonte de valor.

(Herdado de DependencyObject)
SetIsHitTestVisibleInChrome(IInputElement, Boolean)

Define o valor da IsHitTestVisibleInChrome propriedade anexada no elemento de entrada especificado.

SetResizeGripDirection(IInputElement, ResizeGripDirection)

Define o valor da ResizeGripDirection propriedade anexada no elemento de entrada especificado.

SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência, especificada por seu identificador de propriedade de dependência.

(Herdado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Define o valor local de uma propriedade de dependência somente leitura, especificada 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)

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 isso DispatcherObject.

(Herdado de DispatcherObject)
WritePostscript()

Aciona o Changed evento para o Freezable método e invoca seu OnChanged() método. Classes das quais derivam Freezable devem chamar esse método no final de qualquer API que modifique os membros da 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 se ele está sendo acessado de um contexto de threading válido. Freezable os herdadores 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

Nome Description
Changed

Ocorre quando o objeto ou um Freezable objeto que ele contém é modificado.

(Herdado de Freezable)

Aplica-se a