Configurações de Janela WPF: Bordas Arredondadas e Controles de Janela Personalizados

Ao criar aplicações WPF com interface personalizada, é comum precisar substituir os controles padrão de janela por botões customizados para fechar, minimizar e maximizar. Além disso, eliminar a moldura nativa e aplicar cantos arredondados proporciona um visual moderno e elegante.

Implementação de Controles de Janela

A seguir, apresentamos uma abordagem para manipular os estados da janela através de métodos dedicados:


private void EncerrarAplicativo()
{
    var confirmacao = MessageBox.Show(
        "Deseja realmente sair do programa?",
        "Confirmação de Saída",
        MessageBoxButton.YesNo,
        MessageBoxImage.Question);

    if (confirmacao == MessageBoxResult.Yes)
    {
        System.Environment.Exit(0);
    }
}

private void AlternarMaximizacao()
{
    var janela = Application.Current.MainWindow;

    if (janela.WindowState == WindowState.Normal)
    {
        janela.MaxHeight = SystemParameters.WorkArea.Height;
        janela.WindowStyle = WindowStyle.None;
        janela.ResizeMode = ResizeMode.NoResize;
        janela.WindowState = WindowState.Maximized;
    }
    else if (janela.WindowState == WindowState.Maximized)
    {
        janela.ResizeMode = ResizeMode.CanResize;
        janela.WindowState = WindowState.Normal;
    }
}

private void MinimizarJanela()
{
    Application.Current.MainWindow.WindowState = WindowState.Minimized;
}

Arrastar a Janela pela Área Completa

Para permitir que o usuário mova a janela clicando em qualquer região da superfície, utilize o evento de pressionamento do botão eqsuerdo do mouse:


private void AoPressionarBotaoMouse(object sender, MouseButtonEventArgs e)
{
    this.DragMove();
}

Modos de Redimensionamento da Janela

A propriedade ResizeMode controla o comportamento de redimensionamento da janela:

  • NoResize — Janela com tamanho fixo. Exibe apenas o botão de minimizar e fechar.
  • CanMinimize — Janela com tamanho fixo, porém permite minimizar. Não exibe botão de maximizar.
  • CanResize — Comportamento padrão. Permite redimensionamento livre com todos os botões disponíveis.
  • CanResizeWithGrip — Similar ao anterior, mas adiciona um indicador visual no canto inferior direito para redimensionamento.

Controles via ViewModel (Padrão MVVM)

Em aplicações que seguem o padrão MVVM, os comandos de controle da janela podem ser implementados diretamente na ViewModel:


private void FecharJanela()
{
    System.Environment.Exit(0);
}

private void TrocarEstadoJanela()
{
    var janelaPrincipal = Application.Current.MainWindow;

    if (janelaPrincipal.WindowState == WindowState.Normal)
        janelaPrincipal.WindowState = WindowState.Maximized;
    else
        janelaPrincipal.WindowState = WindowState.Normal;
}

private void ReduzirJanela()
{
    Application.Current.MainWindow.WindowState = WindowState.Minimized;
}

Criando Janela sem Borda com Cantos Arredondados

Removendo a Moldura Padrão

As propriedades essenciais para eliminar a borda nativa da janela são:


Background="Transparent"
WindowStyle="None"
AllowsTransparency="True"

Aplicando Cantos Arredondados

Utilize um Border como elemento raiz do conteúdo da janela para definir o raio dos cantos:


<Border CornerRadius="12" BorderThickness="0" BorderBrush="Transparent">
    <Border.Background>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
            <GradientStop Color="#FF2C3E50" Offset="0"/>
            <GradientStop Color="#FF4CA1AF" Offset="1"/>
        </LinearGradientBrush>
    </Border.Background>

    <Grid>
        <!-- Conteúdo da aplicação aqui -->
    </Grid>
</Border>

Configurando o WindowChrome

O WindowChrome permite personalizar a aparência da janela mantendo funcionalidades nativas do sistema operacional:


<WindowChrome.WindowChrome>
    <WindowChrome
        ResizeBorderThickness="5"
        CaptionHeight="0"
        CornerRadius="0"
        GlassFrameThickness="0"/>
</WindowChrome.WindowChrome>

Parâmetros do WindowChrome:

  • ResizeBorderThickness — Define a espessura invisível da borda usada para redimensionamento.
  • CaptionHeight — Altura da área de título. Defina como 0 para controle total via XAML.
  • CornerRadius — Raio dos cantos da janela.
  • GlassFrameThickness — Espessura da borda visível do efeito glass.

Tags: WPF XAML MVVM WindowChrome UI Personalizada

Publicado em 6-13 08:32 por Thomas