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
suPerMonitorV2
.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:
Sono stati risolti molti problemi correlati all'annuncio osservati nelle utilità per la lettura dello schermo, assicurandosi che le informazioni sui controlli siano corrette. Ad esempio, ListView ora annuncia correttamente quando un gruppo viene espanso o compresso.
Altri controlli offrono ora supporto Automazione interfaccia utente:
Sono state risolte perdite di memoria correlate all'esecuzione di un'applicazione Windows Form in strumenti di assistive tools, ad esempio l'Assistente vocale.
Gli strumenti di assistive ora tracciano in modo accurato gli indicatori di stato attivo e segnalano rettangoli di delimitazione corretti per i moduli annidati e alcuni elementi di controlli compositi, ad esempio DataGridView, ListViewe TabControl.
Il pattern di controllo ExpandCollapse dell'interfaccia utente di Automazione è stato implementato correttamente nei ListViewcontrolli , TreeViewe PropertyGrid e attiva solo per gli elementi espandibili.
Varie correzioni del rapporto di contrasto dei colori nei controlli.
Miglioramenti della visibilità per ToolStripTextBox e ToolStripButton in temi a contrasto elevato.
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
.NET Desktop feedback