Megosztás a következőn keresztül:


A Windows Forms for .NET 8 újdonságai

Ez a cikk a Windows Forms új funkcióit és fejlesztéseit ismerteti a .NET 8-ban.

A .NET-keretrendszerről a .NET 8-ra való migráláskor érdemes figyelembe vennie néhány kompatibilitástörő változást. További információ: A Windows Formskompatibilitástörő változásai.

Adatkötési fejlesztések

A .NET 7-ben előzetes verzióban jelent meg egy új adatkötési motor, amely most már teljes mértékben engedélyezve van a .NET 8-ban. Bár nem olyan kiterjedt, mint a meglévő Windows Forms adatkötési motor, ez az új motor a WPF után modellezhető, ami megkönnyíti az MVVM tervezési alapelveinek implementálását.

A továbbfejlesztett adatkötési képességek egyszerűbbé teszik az MVVM-minta teljes kihasználását, valamint a Windows Forms ViewModels objektum-relációs leképezőinek használatát. Ez csökkenti a kód mögötti fájlokban lévő kód mennyiségét. Ennél is fontosabb, hogy lehetővé teszi a kódmegosztást a Windows Forms és más .NET GUI-keretrendszerek, például a WPF, az UWP/WinUI és a .NET MAUI között. Fontos megjegyezni, hogy bár a korábban említett GUI-keretrendszerek az XAML-t használják felhasználói felületi technológiaként, az XAML nem érkezik meg a Windows Formshoz.

A IBindableComponent felület és a BindableComponent osztály hajtja az új kötési rendszert. Control implementálja az interfészt, és új adatkötési képességeket biztosít a Windows Forms számára.

Gombparancsok

A gombparancsok előzetes verzióban voltak a .NET 7-ben, és most már teljes mértékben engedélyezve van a .NET 8-ban. A WPF-hez hasonlóan a ICommand felületet megvalósító objektum példánya hozzárendelhető a gomb Command tulajdonságához. Amikor a gombra kattint, a rendszer meghívja a parancsot.

A parancs meghívásakor választható paraméter adható meg a gomb CommandParameter tulajdonságának értékének megadásával.

A Command és CommandParameter tulajdonságok a tervezőben a Tulajdonságok ablakban, a (DataBindings)alatt vannak beállítva, ahogyan az alábbi ábrán látható.

A Visual Studio tulajdonságok ablaka, amely kiemeli a Windows Forms parancs- és parancsparaméter-tulajdonságait.

A gombok a ICommand.CanExecuteChanged eseményt is figyelik, ami miatt a vezérlő lekérdezi a ICommand.CanExecute metódust. Ha ez a metódus truead vissza, a vezérlő engedélyezve van; falsevisszaadásakor a vezérlő le van tiltva.

A Visual Studio DPI fejlesztései

A Visual Studio 2022 17.8 bemutatja a DPI-nem érzékeny tervező nézeteket. Korábban a Visual Studio Windows Designer lapja a Visual Studio DPI-jén futott. Ez problémákat okoz, ha DPI-t nem tudó Windows Forms-alkalmazást tervez. Most már biztosíthatja, hogy a tervező ugyanakkora léptékben fusson, mint ahogyan azt szeretné, hogy az alkalmazás fusson, függetlenül attól, hogy DPI-érzékeny vagy sem. A funkció bevezetése előtt dpi-unaware módban kellett futtatnia a Visual Studiót, ami miatt maga a Visual Studio homályossá vált, amikor a skálázást a Windowsban alkalmazták. Most már elhagyhatja a Visual Studio-t, és engedheti, hogy a tervező DPI-t nem érzékelő módban fusson.

Engedélyezheti a DPI-unaware tervezőt a Windows Forms-projekthez, ha hozzáad <ForceDesignerDPIUnaware> a projektfájlhoz, és az értéket trueértékre állítja.

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

Fontos

A Visual Studio ezt a beállítást a projekt betöltésekor olvassa be, és nem a módosításkor. A beállítás módosítása után távolítsa el és töltse be újra a projektet, hogy a Visual Studio tiszteletben tartsa.

Magas DPI-fejlesztések

A PerMonitorV2-nál a magas DPI-renderelés javult.

  • Beágyazott vezérlők helyes méretezése. Például egy panelen található gomb, amely egy lapfülre kerül.

  • Skálázza Form.MaximumSize és Form.MinimumSize tulajdonságait az aktuális monitor DPI-beállítások alapján.

    A .NET 8-tól kezdve ez a funkció alapértelmezés szerint engedélyezve van, és ki kell kapcsolnia, hogy visszatérjen az előző viselkedéshez.

    A funkció letiltásához adja hozzá System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi a configProperties beállításhoz runtimeconfig.json, és állítsa az értéket hamis értékre:

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

Egyéb fejlesztések

Íme néhány további jelentős változás:

  • Továbbfejlesztettük a FolderBrowserDialog kezelő kódot, és kijavítottunk néhány memóriaszivárgást.
  • A Windows Forms kódbázisa lassan lehetővé teszi a C# nullképességét, és kigyökerezteti a lehetséges nullhivatkozási hibákat.
  • A System.Drawing forráskód át lett migrálva a Windows Forms GitHub-adattárba.
  • A modern Windows-ikonokat egy új API,System.Drawing.SystemIcons.GetStockIconérheti el. A System.Drawing.StockIconId felsorolás felsorolja az összes elérhető rendszerikont.
  • Most már több tervező érhető el futásidőben. További információért lásd: GitHub probléma #4908.