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 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 true
ad vissza, a vezérlő engedélyezve van; false
visszaadá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
aconfigProperties
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.
.NET Desktop feedback