Novinky v model Windows Forms pro .NET 7
Tento článek popisuje některé nové funkce a vylepšení model Windows Forms v .NET 7.
Při migraci z rozhraní .NET Framework na .NET 7 byste měli vědět několik zásadních změn. Další informace najdete v tématu Zásadní změny v model Windows Forms.
Vylepšení vysokého DPI
Vylepšili jsme vykreslování PerMonitorV2 s vysokým rozlišením DPI:
Správně škálovat vnořené ovládací prvky Například tlačítko, které je na panelu, které je umístěné na stránce karty.
Škálujte Form.MaximumSize a Form.MinimumSize vlastnosti na základě aktuálního nastavení DPI monitoru pro aplikace, které jsou nastavené
ApplicationHighDpiMode
naPerMonitorV2
hodnotu .V .NET 7 je tato funkce ve výchozím nastavení zakázaná a chcete-li tuto změnu přijmout, musíte se přihlásit. Od verze .NET 8 je tato funkce ve výchozím nastavení povolená a pokud se chcete vrátit k předchozímu chování, musíte se z ní odhlásit.
Pokud chcete funkci povolit, nastavte
configProperties
nastavení v runtimeconfig.json:{ "runtimeOptions": { "tfm": "net7.0", "frameworks": [ ... ], "configProperties": { "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": true, } } }
Vylepšení a opravy přístupnosti
Tato verze přidává další vylepšení přístupnosti, včetně následujících položek, mimo jiné:
Řada problémů souvisejících s oznámením, ke kterým dochází u čteček obrazovky, byla vyřešena a zajišťuje správnost informací o ovládacích prvcích. Teď například správně oznámí, ListView kdy je skupina rozbalená nebo sbalená.
Další ovládací prvky teď poskytují podporu model UI Automation:
Bylo opraveno nevracení paměti související se spuštěním model Windows Forms aplikace v rámci nástrojů pro usnadnění, jako je například Předčítání.
Nástroje pro usnadnění nyní přesně vykreslují ukazatele fokusu a ohraničují správné ohraničující obdélníky pro vnořené formuláře a některé prvky složených ovládacích prvků, například DataGridView, ListViewa TabControl.
Ovládací vzor ovládacího prvku ExpandCollapse pro automatizaci byl správně implementován v ListViewovládacích TreeViewprvcích a PropertyGrid ovládacích prvků a aktivuje se pouze pro rozbalitelné položky.
Různé opravy poměru barevného kontrastu v ovládacích prvcích.
Vylepšení viditelnosti pro ToolStripTextBox motivy s vysokým kontrastem a ToolStripButton u motivů s vysokým kontrastem
Vylepšení datových vazeb (Preview)
I když model Windows Forms již měl výkonný vazební modul, zavádí se modernější forma datové vazby, podobně jako datové vazby poskytované WPF.
Nové funkce datových vazeb umožňují plně využít vzor MVVM a použití mapovačů relačních objektů z modelů ViewModel v model Windows Forms jednodušší než dříve. To zase umožňuje omezit kód v souborech s kódem a otevřít nové možnosti testování. Důležitější je, že umožňuje sdílení kódu mezi model Windows Forms a dalšími rozhraními .NET GUI, jako jsou WPF, UPW/WinUI a .NET MAUI. A abychom objasnili často kladenou otázku, není v model Windows Forms potřeba zavést XAML.
Tyto nové funkce datových vazeb jsou ve verzi Preview pro .NET 7 a další práce na této funkci bude probíhat v .NET 8.
Pokud chcete povolit novou vazbu, přidejte EnablePreviewFeatures
nastavení do souboru projektu. To je podporováno v jazyce C# i v jazyce Visual Basic.
<Project Sdk="Microsoft.NET.Sdk">
<!-- other settings -->
<PropertyGroup>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
</Project>
Následující fragment kódu ukazuje nové vlastnosti, události a metody přidané do různých tříd v model Windows Forms. I když je následující příklad kódu v jazyce C#, platí také pro 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);
}
Různá vylepšení
Tady jsou některé další velmi vhodné změny:
- Zpracování přetažení odpovídá funkci přetažení ve Windows s bohatšími efekty zobrazení, jako jsou ikony a popisky textu.
- Dialogová okna složek a souborů umožňují další možnosti:
- Přidat do posledního
- Kontrola přístupu k zápisu
- Rozbalený režim
- OK vyžaduje interakci.
- Výběr jen pro čtení
- Zobrazení skrytých souborů
- Zobrazit připnutá místa
- Zobrazit náhled
- ErrorProvider HasErrors má nyní vlastnost.
- Rozložení přichycení formuláře je pevné pro Windows 11.
Viz také
.NET Desktop feedback