Condividi tramite


Novità di Windows Form per .NET 8

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 ulteriori informazioni, vedere Cambiamenti significativi in Windows Forms.

Miglioramenti nell'associazione dei dati

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, sebbene i framework GUI menzionati in precedenza utilizzino XAML come tecnologia per l'interfaccia utente, XAML non è previsto per Windows Forms.

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.

Command e CommandParameter sono proprietà impostate tramite la finestra di progettazione attraverso la finestra Proprietà, sotto (DataBindings), come illustrato nell'immagine seguente.

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

Anche i pulsanti ascoltano l'evento ICommand.CanExecuteChanged, che fa sì che il controllo interroghi il metodo ICommand.CanExecute. 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 del designer non rilevatori DPI. In precedenza, la scheda Designer di Windows in Visual Studio veniva eseguita con il valore DPI di Visual Studio. Ciò causa problemi durante la progettazione di un'app di Windows Forms non consapevole dei DPI. A questo punto è possibile garantire che l'ambiente di progettazione venga eseguito alla stessa scala desiderata per l'app, con o senza riconoscimento DPI. Prima dell'introduzione di questa funzionalità, dovevi eseguire Visual Studio in modalità non compatibile con DPI, il che rendeva Visual Studio stesso sfocato quando il ridimensionamento DPI veniva applicato in Windows. Ora puoi lasciare Visual Studio da solo e lasciare che il designer esegua non consapevole del DPI.

È 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, scarica e ricarica il progetto per fare in modo che venga preso in considerazione 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.

  • Scala le proprietà Form.MaximumSize e Form.MinimumSize in base alle impostazioni DPI del monitor corrente.

    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 base di codice per Windows Forms sta abilitando gradualmente il supporto dei valori Null per C#, eliminando eventuali errori di riferimento Null.
  • È stata eseguita la migrazione del System.Drawing codice sorgente al repository GitHub di Windows Forms.
  • È 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ù designer in fase di esecuzione. Per altre informazioni, vedere Problema di GitHub n. 4908.