Delen via


Wat is er nieuw in Windows Forms voor .NET 8

In dit artikel worden enkele van de nieuwe functies en verbeteringen van Windows Forms in .NET 8 beschreven.

Er zijn enkele belangrijke wijzigingen waar u rekening mee moet houden bij het migreren van .NET Framework naar .NET 8. Zie Belangrijke wijzigingen in Windows Formsvoor meer informatie.

Verbeteringen voor gegevensbinding

Een nieuwe engine voor gegevensbinding was in preview met .NET 7 en is nu volledig ingeschakeld in .NET 8. Hoewel deze niet zo uitgebreid is als de bestaande Windows Forms-gegevensbindingsengine, wordt deze nieuwe engine gemodelleerd na WPF, waardoor het eenvoudiger wordt om MVVM-ontwerpprincipes te implementeren.

Dankzij de verbeterde mogelijkheden voor gegevensbinding is het eenvoudiger om het MVVM-patroon volledig te gebruiken en object-relationele mappers te gebruiken vanuit ViewModels in Windows Forms. Dit vermindert de hoeveelheid code in code-behind-bestanden. Belangrijker is dat code delen tussen Windows Forms en andere .NET GUI Frameworks zoals WPF, UWP/WinUI en .NET MAUI mogelijk is. Het is belangrijk te weten dat hoewel de eerder genoemde GUI-frameworks XAML als ui-technologie gebruiken, XAML niet beschikbaar is in Windows Forms.

De IBindableComponent-interface en de BindableComponent-klasse sturen het nieuwe bindingssysteem aan. Control implementeert de interface en biedt nieuwe mogelijkheden voor gegevensbinding voor Windows Forms.

Knopopdrachten

Knopopdrachten waren in preview met .NET 7 en zijn nu volledig ingeschakeld in .NET 8. Net als bij WPF kan het exemplaar van een object dat de ICommand-interface implementeert, worden toegewezen aan de eigenschap Command van de knop. Wanneer op de knop wordt geklikt, wordt de opdracht aangeroepen.

Er kan een optionele parameter worden opgegeven wanneer de opdracht wordt aangeroepen door een waarde op te geven voor de eigenschap CommandParameter van de knop.

De eigenschappen Command en CommandParameter worden in de ontwerpfunctie ingesteld via het venster Eigenschappen, onder (DataBindings), zoals geïllustreerd in de volgende afbeelding.

Het venster Eigenschappen van Visual Studio waarin de eigenschappen Command en CommandParameter van een Windows Forms-knop worden gemarkeerd.

Knoppen luisteren ook naar de gebeurtenis ICommand.CanExecuteChanged, waardoor het besturingselement een query uitvoert op de ICommand.CanExecute methode. Wanneer deze methode trueretourneert, wordt het besturingselement ingeschakeld; het besturingselement is uitgeschakeld wanneer falsewordt geretourneerd.

Dpi-verbeteringen in Visual Studio

Visual Studio 2022 17.8 introduceert DPI-ongevoelige ontwerpertabbladen. Voorheen werd het tabblad Windows Designer in Visual Studio uitgevoerd bij de DPI van Visual Studio. Dit veroorzaakt problemen bij het ontwerpen van een DPI-ongevoelige Windows Forms-app. U kunt er nu voor zorgen dat de ontwerpfunctie op dezelfde schaal wordt uitgevoerd als u wilt dat de app wordt uitgevoerd, dpi-bewust of niet. Voordat deze functie werd geïntroduceerd, moest u Visual Studio uitvoeren in de DPI-onbewuste modus, wat ervoor zorgde dat Visual Studio zelf wazig werd wanneer schaling in Windows werd toegepast. Nu kunt u Visual Studio met rust laten en de ontwerper DPI-ongevoelig laten draaien.

U kunt de niet DPI-bewuste modus voor het Windows Forms-project inschakelen door <ForceDesignerDPIUnaware> toe te voegen aan het projectbestand en de waarde in te stellen op 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>

Belangrijk

Visual Studio leest deze instelling wanneer het project wordt geladen en niet wanneer het wordt gewijzigd. Nadat u deze instelling hebt gewijzigd, laad en herlaad uw project zodat Visual Studio het erkent.

Hoge DPI-verbeteringen

Hoge DPI-rendering met PerMonitorV2 is verbeterd:

  • Geneste besturingselementen correct schalen. Bijvoorbeeld een knop die zich in een deelvenster bevindt, dat op een tabblad is geplaatst.

  • Schaal Form.MaximumSize en Form.MinimumSize eigenschappen op basis van de huidige DPI-instellingen voor de monitor.

    Vanaf .NET 8 is deze functie standaard ingeschakeld en moet u ervoor kiezen om terug te keren naar het vorige gedrag.

    Als u de functie wilt uitschakelen, voegt u System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi toe aan de configProperties-instelling in runtimeconfig.jsonen stelt u de waarde in op onwaar:

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

Diverse verbeteringen

Hier volgen enkele andere belangrijke wijzigingen:

  • De code die FolderBrowserDialog verwerkt, is verbeterd, waardoor een aantal geheugenlekken zijn opgelost.
  • De codebasis voor Windows Forms is langzaam aangepast om null-baarheid in C# te activeren, waarbij mogelijke null-verwijzingsfouten worden opgespoord en verwijderd.
  • De System.Drawing broncode is gemigreerd naar de GitHub-opslagplaats van Windows Forms.
  • Moderne Windows-pictogrammen zijn toegankelijk via een nieuwe API, System.Drawing.SystemIcons.GetStockIcon. De opsomming System.Drawing.StockIconId bevat alle beschikbare systeempictogrammen.
  • Er zijn nu meer ontwerpers beschikbaar tijdens uitvoeringstijd. Zie GitHub-probleem #4908voor meer informatie.