Partilhar via


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

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

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

Melhorias de alto DPI

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

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

  • Dimensione as propriedades Form.MaximumSize e Form.MinimumSize com base nas configurações atuais de DPI do monitor para aplicativos que são executados com ApplicationHighDpiMode definido para PerMonitorV2.

    No .NET 7, esse recurso é desabilitado por padrão e você deve optar por receber essa alteração. A partir do .NET 8, esse recurso é habilitado por padrão e você precisa desativar ele para reverter para o comportamento anterior.

    Para habilitar o recurso, defina a configuração de configProperties em runtimeconfig.json:

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

Melhorias e correções de acessibilidade

Esta versão adiciona mais melhorias à acessibilidade, incluindo, entre outros, os seguintes itens:

Melhorias na vinculação de dados (pré-visualização)

Embora o Windows Forms já tivesse um poderoso mecanismo de vinculação, uma forma mais moderna de vinculação de dados, semelhante à vinculação de dados fornecida pelo WPF, está sendo introduzida.

Os novos recursos de vinculação de dados permitem que você adote totalmente o padrão MVVM e o uso de mapeadores objeto-relacionais de ViewModels no Windows Forms mais facilmente do que antes. Isso, por sua vez, torna possível reduzir o código nos ficheiros de code-behind, e possibilita novas formas de teste. 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. E para esclarecer uma pergunta comum, não há planos para introduzir o XAML no Windows Forms.

Esses novos recursos de vinculação de dados estão em visualização para o .NET 7, e mais trabalho sobre esse recurso acontecerá no .NET 8.

Para habilitar a nova associação, adicione a configuração EnablePreviewFeatures ao arquivo de projeto. Isso é suportado em C# e Visual Basic.

<Project Sdk="Microsoft.NET.Sdk">

  <!-- other settings -->

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
  </PropertyGroup>

</Project>

O trecho de código a seguir demonstra as novas propriedades, eventos e métodos adicionados às várias classes no Windows Forms. Embora o exemplo de código a seguir esteja em C#, ele também se aplica ao Visual Basic.

public class Control  {
    [BindableAttribute(true)]
    public virtual object DataContext { get; set; }
    [BrowsableAttribute(true)]
    public event EventHandler DataContextChanged;
    protected virtual void OnDataContextChanged(EventArgs e);
    protected virtual void OnParentDataContextChanged(EventArgs e);
}

[RequiresPreviewFeaturesAttribute]
public abstract class BindableComponent : Component, IBindableComponent, IComponent, IDisposable {
    protected BindableComponent();
    public BindingContext? BindingContext { get; set; }
    public ControlBindingsCollection DataBindings { get; }
    public event EventHandler BindingContextChanged;
    protected virtual void OnBindingContextChanged(EventArgs e);
}

public abstract class ButtonBase : Control {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand? Command { get; set; }
    [BindableAttribute(true)]
    public object? CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

public abstract class ToolStripItem : BindableComponent, IComponent, IDisposable, IDropTarget {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand Command { get; set; }
    [BindableAttribute(true)]
    public object CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

Melhorias diversas

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

  • A manipulação de arrastar e soltar corresponde à funcionalidade de arrastar e soltar do Windows com efeitos de exibição mais avançados, como ícones e rótulos de texto.
  • As caixas de diálogo de pastas e arquivos permitem mais opções:
    • Adicionar aos recentes
    • Verificar acesso de gravação
    • Modo expandido
    • OK requer interação
    • Selecionar somente leitura
    • Mostrar ficheiros ocultos
    • Mostrar locais fixados
    • Mostrar pré-visualização
  • ErrorProvider tem uma propriedade HasErrors agora.
  • O layout de ajuste do formulário foi corrigido no Windows 11.

Ver também