Condividi tramite


Novità di Windows Form per .NET 7

Questo articolo descrive alcune delle nuove funzionalità di Windows Form e miglioramenti in .NET 7.

Quando si esegue la migrazione da .NET Framework a .NET 7, è necessario tenere presenti alcune modifiche di rilievo. Per altre informazioni, vedere Modifiche di rilievo in Windows Form.

Miglioramenti di valori DPI elevati

Il rendering con valori DPI elevati con PerMonitorV2 è stato migliorato:

  • Ridimensionare correttamente i controlli annidati. Ad esempio, un pulsante che si trova in un pannello, posizionato in una pagina di tabulazione.

  • Ridimensionare Form.MaximumSize e Form.MinimumSize proprietà in base alle impostazioni DPI di monitoraggio correnti per le applicazioni che vengono eseguite ApplicationHighDpiMode su PerMonitorV2.

    In .NET 7 questa funzionalità è disabilitata per impostazione predefinita ed è necessario acconsentire esplicitamente a ricevere questa modifica. A partire da .NET 8, questa funzionalità è abilitata per impostazione predefinita ed è necessario rifiutarla esplicitamente per ripristinare il comportamento precedente.

    Per abilitare la funzionalità, impostare l'impostazione configProperties in runtimeconfig.json:

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

Miglioramenti e correzioni dell'accessibilità

Questa versione aggiunge altri miglioramenti all'accessibilità, inclusi gli elementi seguenti:

Miglioramenti del data binding (anteprima)

Anche se Windows Form aveva già un potente motore di associazione, viene introdotta una forma più moderna di data binding, simile al data binding fornito da WPF.

Le nuove funzionalità di data binding consentono di adottare completamente il modello MVVM e l'uso di mapper relazionali a oggetti di ViewModel in Windows Form più semplice rispetto a prima. Ciò, a sua volta, consente di ridurre il codice nei file code-behind e apre nuove possibilità di test. Ancora più importante, abilita la condivisione del codice tra Windows Form e altri framework GUI .NET, ad esempio WPF, UWP/WinUI e .NET MAUI. E per chiarire una domanda comune, non esistono piani per introdurre XAML in Windows Form.

Queste nuove funzionalità di data binding sono disponibili in anteprima per .NET 7 e altre operazioni su questa funzionalità verranno eseguite in .NET 8.

Per abilitare la nuova associazione, aggiungere l'impostazione EnablePreviewFeatures al file di progetto. Questa funzionalità è supportata sia in C# che in Visual Basic.

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

  <!-- other settings -->

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

</Project>

Il frammento di codice seguente illustra le nuove proprietà, gli eventi e i metodi aggiunti alle varie classi in Windows Form. Anche se l'esempio di codice seguente è in C#, si applica anche a 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);
}

Miglioramenti vari

Ecco alcune altre modifiche rilevanti:

  • La gestione del trascinamento della selezione corrisponde alla funzionalità di trascinamento della selezione di Windows con effetti di visualizzazione più avanzati, ad esempio icone ed etichette di testo.
  • Le finestre di dialogo cartelle e file consentono altre opzioni:
    • Aggiungi a recente
    • Controllare l'accesso in scrittura
    • Modalità espansa
    • OK richiede l'interazione
    • Selezionare sola lettura
    • Mostra file nascosti
    • Mostra posizioni bloccate
    • Mostra anteprima
  • ErrorProvider ha ora una HasErrors proprietà .
  • Il layout dello snap del modulo è fisso per Windows 11.

Vedi anche