Partilhar via


Classe WindowChrome

Representa um objeto que descreve as personalizações para a área não-cliente de uma janela.

Hierarquia de herança

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.DependencyObject
      System.Windows.Freezable
        Microsoft.Windows.Shell.WindowChrome

Namespace:  Microsoft.Windows.Shell
Assembly:  Microsoft.Windows.Shell (em Microsoft.Windows.Shell.dll)

Sintaxe

'Declaração
Public Class WindowChrome _
    Inherits Freezable
public class WindowChrome : Freezable
public ref class WindowChrome : public Freezable
type WindowChrome =  
    class
        inherit Freezable
    end
public class WindowChrome extends Freezable

O tipo WindowChrome expõe os membros a seguir.

Construtores

  Nome Descrição
Método público WindowChrome Initializes a new instance of the WindowChrome class.

Início

Propriedades

  Nome Descrição
Propriedade pública CanFreeze Obtém um valor que indica se o objeto pode ser feito unmodifiable. (Herdado de Freezable.)
Propriedade pública CaptionHeight Obtém ou define a altura da área de legenda na parte superior de uma janela.
Propriedade pública CornerRadius Obtém ou define um valor que indica a quantidade que os cantos de uma janela são arredondados.
Propriedade pública DependencyObjectType Obtém o DependencyObjectType que envolve o CLR tipo de instância.  (Herdado de DependencyObject.)
Propriedade pública Dispatcher Obtém o Dispatcher Este DispatcherObject está associado. (Herdado de DispatcherObject.)
Propriedade públicaMembro estático GlassFrameCompleteThickness Obtém uma espessura uniforme de -1.
Propriedade pública GlassFrameThickness Obtém ou define um valor que indica a largura da borda ao redor de uma janela de vidro.
Propriedade pública IsFrozen Obtém um valor que indica se o objeto é modificável atualmente. (Herdado de Freezable.)
Propriedade pública IsSealed Obtém um valor que indica se essa instância atualmente está lacrada (somente para leitura). (Herdado de DependencyObject.)
Propriedade pública NonClientFrameEdges Obtém ou define um valor que indica que bordas da moldura da janela não pertencem ao cliente.
Propriedade pública ResizeBorderThickness Obtém ou define um valor que indica a largura da borda que é usada para redimensionar uma janela.
Propriedade pública UseAeroCaptionButtons Obtém ou define um valor que indica se o teste de impacto é habilitado nos botões de legenda Windows Aero.

Início

Propriedades anexadas

  Nome Descrição
Propriedade anexada pública IsHitTestVisibleInChrome Obtém ou define um valor que indica se o teste de impacto do WPF é ativado a parte de um elemento que está na área não-cliente de uma janela.
Propriedade anexada pública ResizeGripDirection Obtém ou define um valor que indica a direção do comportamento de alça de redimensionamento em um elemento de entrada.
Propriedade anexada pública WindowChrome Obtém ou define a instância de WindowChrome que está conectado a uma janela.

Início

Métodos

  Nome Descrição
Método público CheckAccess Determina se o segmento de chamada tem acesso a este DispatcherObject. (Herdado de DispatcherObject.)
Método público ClearValue(DependencyProperty) Limpa o valor local de uma propriedade.A propriedade seja limpo é especificada por um DependencyProperty identificador. (Herdado de DependencyObject.)
Método público ClearValue(DependencyPropertyKey) Limpa o valor local de uma propriedade somente leitura.A propriedade seja limpo é especificada por um DependencyPropertyKey. (Herdado de DependencyObject.)
Método público Clone Cria um clone modificável do Freezable, fazendo cópias profunda de todos os valores. do objetoAo copiar propriedades de dependência do objeto, esse método copia expressões (que não mais poderão resolver) mas não animações ou seus valores atuais. (Herdado de Freezable.)
Método protegido CloneCore Torna a instância um clone (cópia profunda) especificado Freezable usando valores de propriedade de base (sem animação). (Herdado de Freezable.)
Método público CloneCurrentValue Cria um clone modificável (cópia em profundidade) da Freezable usando seus valores atuais. (Herdado de Freezable.)
Método protegido CloneCurrentValueCore Torna a instância um clone modificável (cópia em profundidade) especificado Freezable usando valores de propriedade atual. (Herdado de Freezable.)
Método público CoerceValue Converte o valor especificado propriedade de dependência.Isso é feito chamando qualquer CoerceValueCallback especificada nos metadados de propriedade para a propriedade de dependência conforme ela existe na chamada de função DependencyObject. (Herdado de DependencyObject.)
Método protegido CreateInstance Initializes a new instance of the Freezable class. (Herdado de Freezable.)
Método protegido CreateInstanceCore Creates a new instance of the WindowChrome class. (Substitui Freezable.CreateInstanceCore().)
Método público Equals Determina se um fornecido DependencyObject é equivalente à atual DependencyObject. (Herdado de DependencyObject.)
Método protegido Finalize Permite que um objeto tentar liberar recursos e executar outras operações de limpeza antes que ele é recuperado pela coleta de lixo. (Herdado de Object.)
Método público Freeze Torna o objeto atual unmodifiable e define sua IsFrozen propriedade para true. (Herdado de Freezable.)
Método protegido FreezeCore Faz o Freezable object unmodifiable ou testa se podem ser feita unmodifiable. (Herdado de Freezable.)
Método público GetAsFrozen Cria uma cópia congelada a Freezable, usando valores de propriedade de base (sem animação).Porque a cópia está congelada, qualquer subobjetos congelados são copiados por referência. (Herdado de Freezable.)
Método protegido GetAsFrozenCore Torna a instância um clone congelado especificado Freezable usando valores de propriedade de base (sem animação). (Herdado de Freezable.)
Método público GetCurrentValueAsFrozen Cria uma cópia congelada a Freezable usando valores de propriedade atual.Porque a cópia está congelada, qualquer subobjetos congelados são copiados por referência. (Herdado de Freezable.)
Método protegido GetCurrentValueAsFrozenCore Torna a instância atual de um clone congelado especificado Freezable.Se o objeto tem propriedades de dependência animado, seus valores atuais de animados são copiados. (Herdado de Freezable.)
Método público GetHashCode Obtém um código de hash para este DependencyObject. (Herdado de DependencyObject.)
Método públicoMembro estático GetIsHitTestVisibleInChrome Obtém o valor da IsHitTestVisibleInChrome anexado a propriedade de um elemento de entrada especificado.
Método público GetLocalValueEnumerator Cria um enumerador especializado para determinar quais propriedades de dependência localmente têm definir valores nessa DependencyObject. (Herdado de DependencyObject.)
Método públicoMembro estático GetResizeGripDirection Obtém o valor da ResizeGripDirection anexado a propriedade de um elemento de entrada especificado.
Método público GetType Obtém o Type da instância atual. (Herdado de Object.)
Método público GetValue Retorna o valor efetivo atual de um propriedade de dependência nesta instância de um DependencyObject. (Herdado de DependencyObject.)
Método públicoMembro estático GetWindowChrome Obtém o valor da WindowChrome anexado a propriedade especificada Window.
Método público InvalidateProperty Avalia o valor efetivo de propriedade de dependência especificado (Herdado de DependencyObject.)
Método protegido MemberwiseClone Cria uma cópia superficial do atual Object. (Herdado de Object.)
Método protegido OnChanged Chamado quando o atual Freezable objeto é modificado. (Herdado de Freezable.)
Método protegido OnFreezablePropertyChanged(DependencyObject, DependencyObject) Garante que os ponteiros de contexto apropriado estiver estabelecidos para um DependencyObjectType o membro de dados que acabou de ser definido. (Herdado de Freezable.)
Método protegido OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) Este membro dá suporte a Windows Presentation Foundation (WPF) infra-estrutura e não se destina a ser usado diretamente em seu código. (Herdado de Freezable.)
Método protegido OnPropertyChanged Substitui o DependencyObject a implementação de OnPropertyChanged também chamar Changed manipuladores em resposta a uma alteração propriedade de dependência do tipo Freezable. (Herdado de Freezable.)
Método público ReadLocalValue Retorna o valor de local de um propriedade de dependência, se ele existir. (Herdado de DependencyObject.)
Método protegido ReadPreamble Garante que o Freezable está sendo acessado de um segmento válido.Os herdeiros de Freezable deve chamar esse método no início de qualquer API que lê os membros de dados que são não dependência propriedades. (Herdado de Freezable.)
Método públicoMembro estático SetIsHitTestVisibleInChrome Define o valor de IsHitTestVisibleInChrome anexado propriedade em um elemento de entrada especificado.
Método públicoMembro estático SetResizeGripDirection Define o valor de ResizeGripDirection anexado propriedade em um elemento de entrada especificado.
Método público SetValue(DependencyProperty, Object) Define o valor de local de um propriedade de dependência, especificado por seu identificador de propriedade de dependência. (Herdado de DependencyObject.)
Método público SetValue(DependencyPropertyKey, Object) Define o valor de local de somente leitura propriedade de dependência, especificado pelo DependencyPropertyKey identificador de propriedade de dependência. (Herdado de DependencyObject.)
Método públicoMembro estático SetWindowChrome Define o valor de WindowChrome anexado a propriedade especificada Window.
Método protegido ShouldSerializeProperty Retorna um valor que indica se os processos de serialização devem serializar o valor para o fornecido propriedade de dependência. (Herdado de DependencyObject.)
Método público ToString Retorna um string que representa o objeto atual. (Herdado de Object.)
Método público VerifyAccess Impõe que o thread de chamada tem acesso a este DispatcherObject. (Herdado de DispatcherObject.)
Método protegido WritePostscript Eleva o Changed evento para o Freezable e invoca seu OnChanged método.Classes que derivam de Freezable deve 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.)
Método protegido WritePreamble Verifica se o Freezable não está congelada e que ele está sendo acessado a partir de um contexto de segmentação válido.Freezableos herdeiros devem chamar esse método no início de qualquer API que grava os membros de dados que são não dependência propriedades. (Herdado de Freezable.)

Início

Eventos

  Nome Descrição
Evento público Changed Ocorre quando o Freezable ou um objeto que ele contém é modificado. (Herdado de Freezable.)

Início

Campos

  Nome Descrição
Campo públicoMembro estático CaptionHeightProperty Identifica o CaptionHeight propriedade de dependência.
Campo públicoMembro estático CornerRadiusProperty Identifica o CornerRadius propriedade de dependência.
Campo públicoMembro estático GlassFrameThicknessProperty Identifica o GlassFrameThickness propriedade de dependência.
Campo públicoMembro estático IsHitTestVisibleInChromeProperty Identifica o IsHitTestVisibleInChrome propriedade de dependência.
Campo públicoMembro estático NonClientFrameEdgesProperty Identifica o NonClientFrameEdges propriedade de dependência.
Campo públicoMembro estático ResizeBorderThicknessProperty Identifica o ResizeBorderThickness propriedade de dependência.
Campo públicoMembro estático ResizeGripDirectionProperty Identifica o ResizeGripDirection propriedade de dependência.
Campo públicoMembro estático UseAeroCaptionButtonsProperty Identifica o UseAeroCaptionButtons propriedade de dependência.
Campo públicoMembro estático WindowChromeProperty Identifica o WindowChrome propriedade de dependência.

Início

Comentários

O WindowChrome classe permite que você amplie o conteúdo de Windows Presentation Foundation (WPF) para a área de não-cliente de uma janela que normalmente é reservada para o Gerenciador de janela do sistema operacional.

Padrão do Windows

Padrão do windows é composto de dois retângulos sobrepostos. O retângulo externo é o área não cliente, que é conhecida como cromo. Ele é desenhado e gerenciado pelo Gerenciador de janelas do sistema operacional. Suas dimensões são determinadas pelas configurações de sistema operacional padrão. O quadro não-cliente fornece recursos de janela padrão e comportamentos. Estes incluem os botões de legenda (minimizar, maximizar e fechar), a borda da janela, redimensionar e mover comportamentos, o ícone do aplicativo e título e o menu do sistema. O retângulo interno é o área do cliente. Ele contém o conteúdo do seu aplicativo e ele é desenhado e gerenciado pela aplicação. Para obter mais informações sobre o windows em aplicativos WPF, consulte Visão geral do WPF do Windows.

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

Elementos de janela

Windows personalizado

Você pode personalizar a borda da janela, definindo a Window.WindowStyle propriedade para None ou usando o WindowChrome classe.

WindowStyle. None

Uma maneira de personalizar a aparência de uma janela de aplicativo do WPF é definir o Window.WindowStyle propriedade para None. Isso remove o quadro não-cliente da janela e deixa apenas a área de cliente, ao qual você pode aplicar um estilo personalizado. No entanto, quando o quadro não-cliente for removido, você também perderá os recursos de sistema e comportamentos que fornece, como botões de legenda e o redimensionamento de janela. Outro efeito colateral é que a janela abordará a barra de tarefas do Windows quando ele estiver maximizado. Definindo WindowStyle.None permite que você crie um aplicativo totalmente personalizado, mas também requer 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 o WindowChrome classe. O WindowChrome classe separa a funcionalidade da moldura da janela do visuais e permite controlar o limite entre o cliente e as áreas de não-cliente do seu aplicativo de janela. O WindowChrome classe permite colocar o conteúdo do WPF no quadro de 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; o Redimensionar borda e legenda áreas.

Existem duas partes principais para a criação de uma janela personalizada usando o WindowChrome classe. Primeiro, você pode personalizar a parte não-cliente da janela, definindo as propriedades expostas na WindowChrome objeto. Em seguida, você deve fornecer um modelo para a janela que define a parte do seu aplicativo que é estendido para a área não cliente.As propriedades expostas na WindowChrome objeto são ResizeBorderThickness, CaptionHeight, CornerRadius, e GlassFrameThickness.

O ResizeBorderThickness propriedade especifica uma borda invisível ao redor de fora da janela do aplicativo que o usuário pode clicar e arrastar para redimensionar a janela.

O CaptionHeight propriedade especifica uma área invisível na parte superior da janela que permite que os comportamentos de sistema normalmente associados com a 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 para mostrar o menu do sistema.

Área Redimensionar borda e a legenda não tem elementos visuais; eles só pode definir áreas que respondam à entrada e ativar os comportamentos de janela padrão do fornecido pelo sistema.

O CornerRadius propriedade especifica a quantidade que os cantos da janela são arredondados. Esta propriedade não tem qualquer efeito se o quadro de vidro está habilitado para uma janela.

O GlassFrameThickness propriedade especifica a largura do quadro de vidro ao redor da janela. Por padrão, ele usa o valor de sistema especificado pelo 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 estão visíveis e interativo. O aplicativo é responsável por exibir o texto de ícone e a legenda do aplicativo. Você pode definir o GlassFrameThickness propriedade para tornar o quadro de vidro alargar ou estreitar o padrão.

Observação de cuidadoCuidado

O tamanho dos botões de legenda não é alterado quando o GlassFrameThickness propriedade é alterada.Se a altura da parte superior do quadro de vidro for menor do que a altura dos botões de legenda, os botões de legenda não será completamente visíveis.

Para tornar uma janela personalizada que não possui um quadro de vidro, defina a GlassFrameThickness propriedade para um valor uniforme 0. Isso irá desativar e ocultar os botões de legenda padrão.

Para estender o quadro de vidro para cobrir toda a janela, defina a GlassFrameThickness a propriedade com um valor negativo na lateral. Quando o GlassFrameThickness for definida como um valor negativo para qualquer lado, seu valor coagido será igual a GlassFrameCompleteThickness.

Observação

Aero são um conjunto de aprimoramentos visuais na aparência e funcionalidade de área de trabalho da Windows foi introduzida no Windows Vista.Um dos recursos do Aero visualmente mais óbvios é que as bordas da janela de vidro translúcido.Windows Aero é ativado pelo recurso de composição da área de trabalho de Desktop Window Manager (DWM).

Os efeitos do Windows Aero glass não são suportados em todos os sistemas operacionais e podem ser desabilitados em sistemas operacionais suportados. Se o Windows Aero não está disponível, o quadro de vidro não será exibido independentemente do GlassFrameThickness valor da propriedade. A área de borda especificada por esta propriedade aparecerá em preta em vez disso.Verifique o IsGlassEnabled propriedade para verificar se os efeitos do Windows Aero glass estão disponíveis. Se os efeitos de vidro não estiverem disponíveis, você deve fornecer um estilo de janela alternativo que não use o quadro de vidro ou janela padrão, definindo o estilo da janela como null.

Você pode estender seu conteúdo WPF no quadro de janela, especificando um ControlTemplate que define a aparência e comportamento do conteúdo do quadro. Você pode definir o TargetType do ControlTemplate para o tipo da janela que está personalizando.

<ControlTemplate TargetType="{x:Type local:MainWindow}">

Por padrão, as partes de 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, anexar a propriedade WindowsChrome.IsHitTestVisibleInChrome anexado ao elemento e defini-la 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 para a janela. Ele usa todos os valores padrão para as propriedades de WindowChrome, que faz com que a janela a aparência de uma janela padrão.

<Setter Property="shell:WindowChrome.WindowChrome">
    <Setter.Value>
        <shell:WindowChrome />
    </Setter.Value>
</Setter>

O modelo da janela deve especificar um apresentador conteúdo para exibir o conteúdo da janela especificada em seu aplicativo. Por padrão, o WindowChrome classe 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 fundo branco ao redor do conteúdo apresentador para emular a aparência de uma janela padrão. Ela também especifica uma margem que será vinculada à propriedade WindowNonClientFrameThickness, que obtém a largura de 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 do aplicativo e o título não são exibidas pela classe WindowChrome; eles precisam ser adicionados para a borda como conteúdo personalizado. O XAML a seguir adiciona uma imagem e um textblock para exibir o ícone e o título. Os dois elementos são vinculados às propriedades correspondentes na janela. A largura da imagem é vinculada a largura de SmallIconSize, que obtém o tamanho padrão do sistema para o ícone. A propriedade IsHitTestVisibleInChrome anexado é definida na imagem para que ele possa receber eventos de 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"/>

Acesso thread-safe

Quaisquer membros static (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Consulte também

Referência

Namespace Microsoft.Windows.Shell