Compartilhar via


Novidades 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 significativas que você deve conhecer ao migrar do .NET Framework para o .NET 8. Para obter mais informações, consulte Alterações interruptivas no Windows Forms.

Melhorias na vinculação de dados

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

Os recursos aprimorados de associação de dados simplificam a utilização total do padrão MVVM e o emprego de mapeadores relacionais de objeto de ViewModels no Windows Forms. Isso reduz a quantidade de código em arquivos code-behind. Mais importante, ele permite o compartilhamento de código entre o 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 impulsionam o novo sistema de ligação. Control implementa a interface e fornece novos recursos de associação de dados para Windows Forms.

Comandos de botão

Os comandos de botão estavam em versão prévia com o .NET 7 e agora estão totalmente habilitados 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 é chamado.

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

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

A janela de propriedades do Visual Studio realçando 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 é desabilitado quando falseé retornado.

Aprimoramentos de 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ê precisava 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 permitir que o designer execute o DPI sem reconhecimento.

Você pode habilitar o designer sem reconhecimento de DPI para o projeto do 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 a respeite.

Melhorias de alto DPI

A renderização de alto DPI foi PerMonitorV2 aprimorada:

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

  • Escala Form.MaximumSize e Form.MinimumSize propriedades com base nas configurações atuais de DPI do monitor.

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

    Para desabilitar o recurso, adicione System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi à configProperties configuração em runtimeconfig.json e 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 que lidou foi melhorado FolderBrowserDialog , corrigindo alguns vazamentos de memória.
  • A base de código do Windows Forms tem habilitado lentamente a nulidade do C#, eliminando 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 do sistema disponíveis.
  • Mais designers estão disponíveis em tempo de execução agora. Para obter mais informações, consulte o problema #4908 do GitHub.