Sdílet prostřednictvím


Novinky v model Windows Forms pro .NET 8

Tento článek popisuje některé nové funkce a vylepšení model Windows Forms v .NET 8.

Při migraci z rozhraní .NET Framework na .NET 8 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í datových vazeb

Nový modul datových vazeb byl ve verzi Preview s .NET 7 a je teď plně povolený v .NET 8. I když není tak rozsáhlý jako stávající modul pro vytváření datových vazeb model Windows Forms, tento nový modul je modelován po WPF, což usnadňuje implementaci principů návrhu MVVM.

Vylepšené možnosti datových vazeb usnadňují plné využití vzoru MVVM a využití mapovačů relačních objektů z modelů ViewModel v model Windows Forms. Tím se sníží množství kódu v souborech za kódem. 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. Je důležité si uvědomit, že zatímco dříve zmíněné architektury grafického uživatelského rozhraní používají XAML jako technologii uživatelského rozhraní, XAML se nechystá do model Windows Forms.

Rozhraní IBindableComponent a BindableComponent třída řídí nový systém vazeb. Controlimplementuje rozhraní a poskytuje nové možnosti datových vazeb pro model Windows Forms.

Příkazy tlačítek

Příkazy spouštěné tlačítkem byly ve verzi Preview s .NET 7 a jsou teď plně povolené v .NET 8. Podobně jako WPF může být instance objektu, který implementuje ICommand rozhraní, přiřazeno k vlastnosti tlačítka Command . Po kliknutí na tlačítko se vyvolá příkaz.

Volitelný parametr lze zadat při vyvolání příkazu zadáním hodnoty vlastnosti tlačítka CommandParameter .

Vlastnosti Command jsou CommandParameter v návrháři nastaveny prostřednictvím okna Vlastnosti v části (DataBindings), jak je znázorněno na následujícím obrázku.

Okno vlastností sady Visual Studio, které zvýrazňuje vlastnosti Command a CommandParameter tlačítka model Windows Forms.

Tlačítka také poslouchají ICommand.CanExecuteChanged událost, která způsobí, že ovládací prvek dotazuje metodu ICommand.CanExecute . Když tato metoda vrátí true, ovládací prvek je povolen; ovládací prvek je zakázán při falsevrácení.

Vylepšení DPI sady Visual Studio

Visual Studio 2022 17.8 zavádí karty návrháře bez rozlišení DPI. Karta Windows Designer v sadě Visual Studio se dříve spustila na DPI sady Visual Studio. To způsobuje problémy při návrhu aplikace model Windows Forms s vědomím DPI. Teď můžete zajistit, aby se návrhář spustil ve stejném měřítku, ve kterém má aplikace běžet, a to buď s rozlišením DPI, nebo ne. Před zavedením této funkce jste museli spustit Visual Studio v režimu bez rozlišení DPI, který při použití škálování ve Windows rozostřil samotný Visual Studio. Teď můžete sadu Visual Studio nechat samotnou a nechat návrháře beze změny DPI.

Návrháře bez rozlišení DPI pro projekt model Windows Forms můžete povolit přidáním <ForceDesignerDPIUnaware> do souboru projektu a nastavením hodnoty na truehodnotu .

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

Důležité

Visual Studio toto nastavení přečte při načtení projektu, a ne při změně. Po změně tohoto nastavení uvolněte projekt a znovu ho načtěte, abyste visual Studio respektovali.

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álování Form.MaximumSize a Form.MinimumSize vlastnosti na základě aktuálního nastavení DPI monitorování

    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 tuto funkci zakázat, přidejte System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi do configProperties nastavení v runtimeconfig.json a nastavte hodnotu false:

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

Různá vylepšení

Tady jsou některé další velmi vhodné změny: