Freigeben über


Neuerungen in Windows Forms für .NET 7

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

Es gibt einige wichtige Änderungen, die Sie beim Migrieren 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.

  • Die Skalierung von Form.MaximumSize und Form.MinimumSize Eigenschaften basierend auf den aktuellen DPI-Einstellungen des Monitors für Anwendungen, die mit ApplicationHighDpiMode auf PerMonitorV2 laufen.

    In .NET 7 ist dieses Feature standardmäßig deaktiviert, und Sie müssen sich anmelden, 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 configProperties Einstellung in runtimeconfig.jsonfest:

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

Verbesserungen und Korrekturen bei der Barrierefreiheit

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

Verbesserungen bei der Datenbindung (Vorschau)

Während Windows Forms bereits über ein leistungsfähiges Bindungsmodul verfügte, wird eine modernere Form der Datenbindung eingeführt, ähnlich wie die von WPF bereitgestellte Datenbindung.

Mit den neuen Datenbindungsfeatures 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 ist, dass die Codefreigabe zwischen Windows Forms und anderen .NET-GUI-Frameworks wie WPF, UWP/WinUI und .NET MAUI ermöglicht wird. 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 mehr Arbeit an diesem Feature erfolgt in .NET 8.

Um die neue Bindung zu aktivieren, fügen Sie der Projektdatei die EnablePreviewFeatures Einstellung 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 Codeausschnitt veranschaulicht die neuen Eigenschaften, Ereignisse und Methoden, die den verschiedenen Klassen in Windows Forms hinzugefügt wurden. Obwohl sich das folgende Codebeispiel in C# befindet, 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-and-Drop-Behandlung entspricht der Windows-Drag-and-Drop-Funktion mit umfangreicheren Anzeigeeffekten wie Symbolen und Textbeschriftungen.
  • Ordner- und Dateidialogfeld ermöglichen weitere Optionen:
    • Zu den zuletzt hinzugefügten
    • Schreibzugriff überprüfen
    • Erweiterter Modus
    • OK erfordert Interaktion
    • Schreibgeschützt auswählen
    • Ausgeblendete Dateien anzeigen
    • Angeheftete Orte anzeigen
    • Vorschau anzeigen
  • ErrorProvider verfügt jetzt über eine HasErrors Eigenschaft.
  • Das Andocklayout des Formulars wurde für Windows 11 angepasst.

Siehe auch