Partilhar via


O que há de novo no Windows Forms para .NET 8

Este artigo descreve alguns dos novos recursos e aprimoramentos do Windows Forms no .NET 8.

Há algumas alterações importantes que você deve estar ciente ao migrar do .NET Framework para o .NET 8. Para obter mais informações, consulte Alterações significativas no Windows Forms.

Melhorias na vinculação de dados

Um novo mecanismo de vinculação de dados estava em visualização com o .NET 7 e agora está totalmente habilitado no .NET 8. Embora não seja tão extenso quanto o mecanismo de vinculação de dados existente do Windows Forms, esse novo mecanismo é modelado de acordo com o WPF, o que facilita a implementação dos princípios de design MVVM.

Os recursos aprimorados de vinculação de dados tornam mais simples utilizar totalmente o padrão MVVM e empregar mapeadores objeto-relacionais de ViewModels no Windows Forms. Isso reduz a quantidade de código em arquivos code-behind. Mais importante ainda, ele permite o compartilhamento de código entre Windows Forms e outras estruturas de GUI do .NET como WPF, UWP/WinUI e .NET MAUI. É importante observar que, embora as estruturas de GUI mencionadas anteriormente usem XAML como uma tecnologia de interface do usuário, o XAML não está chegando ao Windows Forms.

A IBindableComponent interface e a BindableComponent classe conduzem o novo sistema de ligação. Control implementa a interface e fornece novos recursos de vinculação de dados para o Windows Forms.

Comandos de botão

Os comandos de botão estavam em pré-visualização com o .NET 7 e agora estão totalmente ativados no .NET 8. Semelhante ao WPF, a instância de um objeto que implementa a ICommand interface pode ser atribuída à propriedade do Command botão. Quando o botão é clicado, o comando é invocado.

Um parâmetro opcional pode ser fornecido quando o comando é invocado, especificando um valor para a propriedade do CommandParameter botão.

As Command propriedades e CommandParameter são definidas no designer através da janela Propriedades , em (DataBindings), conforme ilustrado pela imagem a seguir.

A janela de propriedades do Visual Studio destacando as propriedades Command e CommandParameter de um botão do Windows Forms.

Os botões também escutam o evento, o ICommand.CanExecuteChanged que faz com que o controle consulte o ICommand.CanExecute método. Quando esse método retorna true, o controle é habilitado, o controle é desativado quando falseé retornado.

Melhorias do DPI do Visual Studio

Visual Studio 2022 17.8 Apresenta guias de designer sem reconhecimento de DPI. Anteriormente, a guia Windows Designer no Visual Studio era executada no DPI do Visual Studio. Isso causa problemas quando você está criando um aplicativo Windows Forms sem reconhecimento de DPI. Agora você pode garantir que o designer seja executado na mesma escala que você deseja que o aplicativo seja executado, com reconhecimento de DPI ou não. Antes de esse recurso ser introduzido, você tinha que executar o Visual Studio no modo sem reconhecimento de DPI, o que tornava o próprio Visual Studio desfocado quando o dimensionamento era aplicado no Windows. Agora você pode deixar o Visual Studio sozinho e deixar o designer executar DPI-unaware.

Você pode habilitar o designer sem reconhecimento de DPI para o projeto Windows Forms adicionando <ForceDesignerDPIUnaware> ao arquivo de projeto e definindo o valor como true.

<PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>net8.0-windows</TargetFramework>
  <Nullable>enable</Nullable>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
  <ApplicationHighDpiMode>DpiUnawareGdiScaled</ApplicationHighDpiMode>
</PropertyGroup>

Importante

O Visual Studio lê essa configuração quando o projeto é carregado e não quando ele é alterado. Depois de alterar essa configuração, descarregue e recarregue seu projeto para que o Visual Studio o respeite.

Melhorias de alto DPI

A renderização de alto DPI com PerMonitorV2 foi melhorada:

  • Dimensionar corretamente os controles aninhados. Por exemplo, um botão que está em um painel, que é colocado em uma página de guia.

  • Dimensionar Form.MaximumSize e Form.MinimumSize as propriedades com base nas configurações de DPI do monitor atual.

    A partir do .NET 8, esse recurso é habilitado por padrão e você precisa desativar ele para reverter para o comportamento anterior.

    Para desativar o recurso, adicione System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi à configProperties configuração no runtimeconfig.jsone defina o valor como false:

    {
      "runtimeOptions": {
        "tfm": "net8.0",
        "frameworks": [
            ...
        ],
        "configProperties": {
          "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": false,
        }
      }
    }
    

Melhorias diversas

Aqui estão algumas outras mudanças notáveis:

  • O código manipulado FolderBrowserDialog foi melhorado, corrigindo alguns vazamentos de memória.
  • A base de código para Windows Forms tem ativado lentamente a anulabilidade do C#, eliminando quaisquer possíveis erros de referência nula.
  • O System.Drawing código-fonte foi migrado para o repositório GitHub do Windows Forms.
  • Os ícones modernos do Windows podem ser acessados por uma nova API, System.Drawing.SystemIcons.GetStockIcon. A System.Drawing.StockIconId enumeração lista todos os ícones de sistema disponíveis.
  • Mais designers estão disponíveis em tempo de execução agora. Para obter mais informações, consulte a edição #4908 do GitHub.