Delen via


Wat is er nieuw in Windows Forms voor .NET 7

In dit artikel worden enkele van de nieuwe functies en verbeteringen van Windows Forms in .NET 7 beschreven.

Er zijn enkele belangrijke wijzigingen waar u rekening mee moet houden bij het migreren van .NET Framework naar .NET 7. Zie Belangrijke wijzigingen in Windows Formsvoor meer informatie.

Hoge DPI-verbeteringen

Hoge DPI-rendering met PerMonitorV2 is verbeterd:

  • Geneste besturingselementen correct schalen. Bijvoorbeeld een knop die zich in een deelvenster bevindt, dat op een tabbladpagina wordt geplaatst.

  • Schaal de eigenschappen Form.MaximumSize en Form.MinimumSize op basis van de huidige DPI-instellingen van de monitor voor toepassingen die ApplicationHighDpiMode ingesteld hebben op PerMonitorV2.

    In .NET 7 is deze functie standaard uitgeschakeld en moet u zich aanmelden om deze wijziging te ontvangen. Vanaf .NET 8 is deze functie standaard ingeschakeld en moet u ervoor kiezen om terug te keren naar het vorige gedrag.

    Als u de functie wilt inschakelen, stelt u de instelling configProperties in runtimeconfig.jsonin:

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

Toegankelijkheidsverbeteringen en oplossingen

In deze release worden verdere verbeteringen aan de toegankelijkheid toegevoegd, waaronder maar niet beperkt tot de volgende items:

Verbeteringen aan gegevensbinding (preview)

Hoewel Windows Forms al een krachtige bindingsengine had, wordt er een modernere vorm van gegevensbinding geïntroduceerd, vergelijkbaar met gegevensbinding die door WPF wordt geleverd.

Met de nieuwe functies voor gegevensbinding kunt u het MVVM-patroon volledig omarmen en het gebruik van object-relationele mappers uit ViewModels in Windows Forms eenvoudiger dan voorheen. Dit maakt het op zijn beurt mogelijk om code in de bestanden achter de code te verminderen en nieuwe testmogelijkheden te openen. Belangrijker is dat code delen mogelijk is tussen Windows Forms en andere .NET GUI Frameworks, zoals WPF, UWP/WinUI en .NET MAUI. En om een veelgestelde vraag te verduidelijken, zijn er geen plannen om XAML in Windows Forms te introduceren.

Deze nieuwe functies voor gegevensbinding zijn in preview voor .NET 7 en er wordt meer gewerkt aan deze functie in .NET 8.

Als u de nieuwe binding wilt inschakelen, voegt u de instelling EnablePreviewFeatures toe aan het projectbestand. Dit wordt ondersteund in zowel C# als Visual Basic.

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

  <!-- other settings -->

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

</Project>

In het volgende codefragment ziet u de nieuwe eigenschappen, gebeurtenissen en methoden die zijn toegevoegd aan de verschillende klassen in Windows Forms. Hoewel het volgende codevoorbeeld zich in C# bevindt, is dit ook van toepassing op 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);
}

Diverse verbeteringen

Hier volgen enkele andere belangrijke wijzigingen:

  • Slepen en neerzetten komt overeen met de Windows-functionaliteit voor slepen en neerzetten, met rijkere visuele effecten zoals pictogrammen en tekstlabels.
  • Dialoogvensters voor mappen en bestanden bieden meer opties:
    • Toevoegen aan recent
    • Schrijftoegang controleren
    • Uitgevouwen modus
    • OK vereist interactie
    • Alleen-lezen selecteren
    • Verborgen bestanden weergeven
    • Vastgemaakte plaatsen weergeven
    • Voorbeeld weergeven
  • ErrorProvider heeft nu een eigenschap HasErrors.
  • De snap-indeling van het formulier is aangepast voor Windows 11.

Zie ook