Sdílet prostřednictvím


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 na PerMonitorV2hodnotu .

    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é:

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é