Dela via


Nyheter i Windows Forms för .NET 7

I den här artikeln beskrivs några av de nya funktionerna och förbättringarna i Windows Forms i .NET 7.

Det finns några brytande ändringar som du bör känna till när du migrerar från .NET Framework till .NET 7. Mer information finns i Oförenliga ändringar i Windows Forms.

Höga DPI-förbättringar

Hög DPI-rendering med PerMonitorV2 har förbättrats:

  • Skala korrekt kapslade kontroller. Till exempel en knapp som finns i en panel, som placeras på en fliksida.

  • Skala egenskaperna Form.MaximumSize och Form.MinimumSize baserat på de aktuella DPI-inställningarna för bildskärmen för program som körs med ApplicationHighDpiMode inställt på PerMonitorV2.

    I .NET 7 är den här funktionen inaktiverad som standard och du måste välja att ta emot den här ändringen. Från och med .NET 8 är den här funktionen aktiverad som standard och du måste välja bort den för att återgå till det tidigare beteendet.

    Om du vill aktivera funktionen anger du inställningen configProperties i runtimeconfig.json:

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

Hjälpmedelsförbättringar och korrigeringar

Den här versionen ger ytterligare förbättringar av tillgängligheten, inklusive men inte begränsat till följande:

Förbättringar av databindning (förhandsversion)

Windows Forms hade redan en kraftfull bindningsmotor, men en modernare form av databindning, som liknar databindningen från WPF, introduceras.

Med de nya databindningsfunktionerna kan du använda MVVM-mönstret fullt ut och använda objektrelationsmappare från ViewModels i Windows Forms enklare än tidigare. Detta gör det i sin tur möjligt att minska koden i kod bakom filer och öppnar nya testmöjligheter. Ännu viktigare är att det möjliggör koddelning mellan Windows Forms och andra .NET GUI-ramverk som WPF, UWP/WinUI och .NET MAUI. Och för att klargöra en vanlig fråga finns det inga planer på att introducera XAML i Windows Forms.

Dessa nya databindningsfunktioner finns i förhandsversion för .NET 7 och mer arbete med den här funktionen sker i .NET 8.

Om du vill aktivera den nya bindningen lägger du till inställningen EnablePreviewFeatures i projektfilen. Detta stöds i både C# och Visual Basic.

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

  <!-- other settings -->

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

</Project>

Följande kodfragment visar de nya egenskaper, händelser och metoder som lagts till i de olika klasserna i Windows Forms. Även om följande kodexempel finns i C#, gäller det även för 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 förbättringar

Här följer några andra viktiga ändringar:

  • Dra och släpp-hanteringen matchar Funktionerna för dra och släpp i Windows med mer omfattande visningseffekter som ikoner och textetiketter.
  • Mapp- och fildialogrutor tillåter fler alternativ:
    • Lägg till i senaste
    • Kontrollera skrivåtkomst
    • Expanderat läge
    • OK kräver interaktion
    • Välj endast läsbar
    • Visa dolda filer
    • Visa pinnade platser
    • Visa förhandsgranskning
  • ErrorProvider har nu en egenskap för HasErrors.
  • Formulärets snäpläge är åtgärdat för Windows 11.

Se även