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.
Knoppen luisteren ook naar de gebeurtenis ICommand.CanExecuteChanged, waardoor het besturingselement een query uitvoert op de ICommand.CanExecute methode. Wanneer deze methode true
retourneert, wordt het besturingselement ingeschakeld; het besturingselement is uitgeschakeld wanneer false
wordt 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 deconfigProperties
-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.
.NET Desktop feedback