Novità di .NET 8 (Windows Form .NET)

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

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

Miglioramenti del data binding

Un nuovo motore di data binding era in anteprima con .NET 7 ed è ora completamente abilitato in .NET 8. Anche se non è esteso quanto il motore di data binding di Windows Form esistente, questo nuovo motore viene modellato dopo WPF, che semplifica l'implementazione dei principi di progettazione MVVM.

Le funzionalità avanzate di data binding semplificano l'utilizzo completo del modello MVVM e l'uso di mapper relazionali a oggetti di ViewModels in Windows Form. In questo modo si riduce la quantità di codice nei file code-behind. Più importante, consente la condivisione del codice tra Windows Form e altri framework GUI .NET come WPF, UWP/WinUI e .NET MAUI. È importante notare che, mentre i framework GUI menzionati in precedenza usano XAML come tecnologia dell'interfaccia utente, XAML non sta per Windows Form.

L'interfaccia IBindableComponent e la BindableComponent classe guidano il nuovo sistema di associazione. Controlimplementa l'interfaccia e fornisce nuove funzionalità di data binding per Windows Form.

Comandi dei pulsanti

I comandi dei pulsanti erano in anteprima con .NET 7 ed è ora completamente abilitato in .NET 8. Analogamente a WPF, l'istanza di un oggetto che implementa l'interfaccia ICommand può essere assegnata alla proprietà del Command pulsante. Quando si fa clic sul pulsante, viene richiamato il comando .

È possibile specificare un parametro facoltativo quando il comando viene richiamato, specificando un valore per la proprietà del CommandParameter pulsante.

Le Command proprietà e CommandParameter vengono impostate nella finestra di progettazione tramite la finestra Proprietà , in (DataBindings), come illustrato nell'immagine seguente.

La finestra delle proprietà di Visual Studio evidenzia le proprietà Command e CommandParameter di un Windows Form.

Anche i pulsanti sono in ascolto dell'evento ICommand.CanExecuteChanged , che determina la query del metodo da parte del ICommand.CanExecute controllo. Quando il metodo restituisce true, il controllo è abilitato; il controllo viene disabilitato quando falseviene restituito .

Miglioramenti dpi di Visual Studio

Visual Studio 2022 17.8 Introduce le schede della finestra di progettazione dpi non consapevoli. In precedenza, la scheda Progettazione finestre in Visual Studio è stata eseguita con il valore DPI di Visual Studio. Ciò causa problemi durante la progettazione di un'app di Windows Form dpi non nota. A questo punto è possibile assicurarsi che la finestra di progettazione venga eseguita con la stessa scala in cui si vuole che l'app venga eseguita, con riconoscimento DPI o meno. Prima dell'introduzione di questa funzionalità, è stato necessario eseguire Visual Studio in modalità DPI-unware, che ha reso Visual Studio sfocato quando è stato applicato il ridimensionamento in Windows. A questo punto è possibile lasciare solo Visual Studio e lasciare che la finestra di progettazione esegua dpi.Now you can leave Visual Studio alone and let the designer run DPI-unware.

È possibile abilitare la finestra di progettazione dpi-unware per il progetto Windows Form aggiungendo <ForceDesignerDPIUnaware> al file di progetto e impostando il valore su true.

<PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>net8.0-windows</TargetFramework>
  <Nullable>enable</Nullable>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
  <ApplicationHighDpiMode>DpiUnawareGdiScaled</ApplicationHighDpiMode>
</PropertyGroup>

Importante

Visual Studio legge questa impostazione quando il progetto viene caricato e non quando viene modificato. Dopo aver modificato questa impostazione, scaricare e ricaricare il progetto per renderlo rispettato da Visual Studio.

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.

    A partire da .NET 8, questa funzionalità è abilitata per impostazione predefinita ed è necessario rifiutarla esplicitamente per ripristinare il comportamento precedente.

    Per disabilitare la funzionalità, aggiungere System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi all'impostazione configProperties in runtimeconfig.json e impostare il valore su false:

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

Miglioramenti vari

Ecco alcune altre modifiche rilevanti:

  • Il codice gestito FolderBrowserDialog è stato migliorato, correggendo alcune perdite di memoria.
  • La codebase per Windows Form ha abilitato lentamente il supporto dei valori Null per C#, rendendo possibile l'rooting di eventuali errori di riferimento Null.
  • È stata eseguita la migrazione del System.Drawing codice sorgente al repository GitHub Windows Form.
  • È possibile accedere alle icone di Windows moderne tramite una nuova API, System.Drawing.SystemIcons.GetStockIcon. L'enumerazione System.Drawing.StockIconId elenca tutte le icone di sistema disponibili.
  • Sono ora disponibili più finestre di progettazione in fase di esecuzione. Per altre informazioni, vedere Problema di GitHub n. 4908.