Neuerungen in .NET 7 (Windows Forms .NET)

In diesem Artikel werden einige der neuen Features und Verbesserungen von Windows Forms in .NET 7 beschrieben.

Es gibt einige Breaking Changes, die Sie bei der Migration von .NET Framework zu .NET 7 beachten sollten. Weitere Informationen finden Sie unter Breaking Changes in Windows Forms.

Verbesserungen bei hohen DPI-Werten

Das Rendering bei hohen DPI-Werten mit PerMonitorV2 wurde verbessert:

  • Ordnungsgemäße Skalierung geschachtelter Steuerelemente. Beispielsweise eine Schaltfläche, die sich in einem Bereich befindet, der auf einer Registerkartenseite platziert wird.

  • Skalieren Sie Form.MaximumSize- und Form.MinimumSize-Eigenschaften basierend auf den aktuellen DPI-Einstellungen für Monitore für Anwendungen, die ApplicationHighDpiMode ausführen, das auf PerMonitorV2 festgelegt ist.

    In .NET 7 ist dieses Feature standardmäßig deaktiviert, und Sie müssen es aktivieren, um diese Änderung zu erhalten. Ab .NET 8 ist dieses Feature standardmäßig aktiviert, und Sie müssen es deaktivieren, um zum vorherigen Verhalten zurückzukehren.

    Um das Feature zu aktivieren, legen Sie die Einstellung configProperties in runtimeconfig.json fest:

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

Verbesserte Barrierefreiheit und Fehlerkorrekturen

Diese Version fügt weitere Verbesserungen hinsichtlich der Barrierefreiheit hinzu, einschließlich, aber nicht beschränkt auf die folgenden Elemente:

Verbesserungen bei der Datenbindung (Vorschau)

Während Windows Forms bereits über eine leistungsfähige Bindungs-Engine verfügte, wird eine modernere Form der Datenbindung eingeführt, ähnlich wie die von WPF bereitgestellte Datenbindung.

Mit den neuen Features zur Datenbindung können Sie das MVVM-Muster vollständig nutzen und objektrelationale Mapper aus ViewModels in Windows Forms einfacher verwenden als zuvor. Dies wiederum ermöglicht es, Code in den CodeBehind-Dateien zu reduzieren und neue Testmöglichkeiten zu eröffnen. Wichtiger noch, damit wird so die gemeinsame Verwendung von Code durch Windows Forms und andere .NET-GUI-Frameworks wie WPF, UWP/WinUI und .NET MAUI ermöglicht. Und um eine häufig gestellte Frage zu klären, gibt es keine Pläne, XAML in Windows Forms einzuführen.

Diese neuen Datenbindungsfeatures befinden sich in der Vorschau für .NET 7, und an diesem Feature wird in .NET 8 weiter gearbeitet.

Um die neue Bindung zu aktivieren, fügen Sie der Projektdatei die Einstellung EnablePreviewFeatures hinzu. Dies wird sowohl in C# als auch in Visual Basic unterstützt.

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

  <!-- other settings -->

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

</Project>

Der folgende Codeschnipsel demonstriert die neuen Eigenschaften, Ereignisse und Methoden, die den verschiedenen Klassen in Windows Forms hinzugefügt wurden. Auch wenn das folgende Codebeispiel in C# geschrieben ist, gilt es auch 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);
}

Sonstige Verbesserungen

Hier sind einige weitere wichtige Änderungen:

  • Die Drag & Drop-Behandlung entspricht der Drag & Drop-Funktion von Windows mit umfangreicheren Anzeigeeffekten wie Symbolen und Beschriftungen.
  • Ordner- und Dateidialogfelder ermöglichen weitere Optionen:
    • Hinzufügen zu „Zuletzt verwendet“
    • Schreibzugriff überprüfen
    • Aufgeklappter Modus
    • OK erfordert Interaktion
    • Schreibgeschützt auswählen
    • Ausgeblendete Dateien anzeigen
    • Angeheftete Speicherorte anzeigen
    • Vorschau anzeigen
  • ErrorProvider verfügt jetzt über eine HasErrors-Eigenschaft.
  • Das Andocklayout des Formulars wurde für Windows 11 behoben.

Siehe auch