Wat is er nieuw in Windows Forms voor .NET 7
In dit artikel worden enkele van de nieuwe functies en verbeteringen van Windows Forms in .NET 7 beschreven.
Er zijn enkele belangrijke wijzigingen waar u rekening mee moet houden bij het migreren van .NET Framework naar .NET 7. Zie Belangrijke wijzigingen in Windows Formsvoor meer informatie.
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 tabbladpagina wordt geplaatst.
Schaal de eigenschappen Form.MaximumSize en Form.MinimumSize op basis van de huidige DPI-instellingen van de monitor voor toepassingen die
ApplicationHighDpiMode
ingesteld hebben opPerMonitorV2
.In .NET 7 is deze functie standaard uitgeschakeld en moet u zich aanmelden om deze wijziging te ontvangen. 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 inschakelen, stelt u de instelling
configProperties
in runtimeconfig.jsonin:{ "runtimeOptions": { "tfm": "net7.0", "frameworks": [ ... ], "configProperties": { "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": true, } } }
Toegankelijkheidsverbeteringen en oplossingen
In deze release worden verdere verbeteringen aan de toegankelijkheid toegevoegd, waaronder maar niet beperkt tot de volgende items:
Veel problemen met betrekking tot aankondigingen die in schermlezers zijn waargenomen, zijn opgelost, zodat de informatie over besturingselementen juist is. ListView kondigt nu bijvoorbeeld correct aan wanneer een groep wordt uitgevouwen of samengevouwen.
Meer bedieningselementen bieden nu ondersteuning voor UI Automation.
Geheugenlekken met betrekking tot het uitvoeren van een Windows Forms-toepassing onder ondersteunende hulpprogramma's, zoals Verteller, zijn opgelost.
Ondersteunende hulpmiddelen tekenen nu nauwkeurig focusindicatoren en rapporteren de juiste begrenzingsrechthoeken voor geneste formulieren en sommige elementen van samengestelde besturingselementen, zoals DataGridView, ListViewen TabControl.
De Automation-gebruikersinterface ExpandCollapse Control Pattern is correct geïmplementeerd in ListView, TreeViewen PropertyGrid besturingselementen en wordt alleen geactiveerd voor uitbreidbare items.
Verschillende correcties van kleurcontrastverhouding in besturingen.
Zichtbaarheidsverbeteringen voor ToolStripTextBox en ToolStripButton in thema's met hoog contrast.
Verbeteringen aan gegevensbinding (preview)
Hoewel Windows Forms al een krachtige bindingsengine had, wordt er een modernere vorm van gegevensbinding geïntroduceerd, vergelijkbaar met gegevensbinding die door WPF wordt geleverd.
Met de nieuwe functies voor gegevensbinding kunt u het MVVM-patroon volledig omarmen en het gebruik van object-relationele mappers uit ViewModels in Windows Forms eenvoudiger dan voorheen. Dit maakt het op zijn beurt mogelijk om code in de bestanden achter de code te verminderen en nieuwe testmogelijkheden te openen. Belangrijker is dat code delen mogelijk is tussen Windows Forms en andere .NET GUI Frameworks, zoals WPF, UWP/WinUI en .NET MAUI. En om een veelgestelde vraag te verduidelijken, zijn er geen plannen om XAML in Windows Forms te introduceren.
Deze nieuwe functies voor gegevensbinding zijn in preview voor .NET 7 en er wordt meer gewerkt aan deze functie in .NET 8.
Als u de nieuwe binding wilt inschakelen, voegt u de instelling EnablePreviewFeatures
toe aan het projectbestand. Dit wordt ondersteund in zowel C# als Visual Basic.
<Project Sdk="Microsoft.NET.Sdk">
<!-- other settings -->
<PropertyGroup>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
</Project>
In het volgende codefragment ziet u de nieuwe eigenschappen, gebeurtenissen en methoden die zijn toegevoegd aan de verschillende klassen in Windows Forms. Hoewel het volgende codevoorbeeld zich in C# bevindt, is dit ook van toepassing op 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);
}
Diverse verbeteringen
Hier volgen enkele andere belangrijke wijzigingen:
- Slepen en neerzetten komt overeen met de Windows-functionaliteit voor slepen en neerzetten, met rijkere visuele effecten zoals pictogrammen en tekstlabels.
- Dialoogvensters voor mappen en bestanden bieden meer opties:
- Toevoegen aan recent
- Schrijftoegang controleren
- Uitgevouwen modus
- OK vereist interactie
- Alleen-lezen selecteren
- Verborgen bestanden weergeven
- Vastgemaakte plaatsen weergeven
- Voorbeeld weergeven
- ErrorProvider heeft nu een eigenschap HasErrors.
- De snap-indeling van het formulier is aangepast voor Windows 11.
Zie ook
.NET Desktop feedback