Udostępnij za pośrednictwem


Co nowego dla platformy .NET 8 (Windows Forms .NET)

W tym artykule opisano niektóre nowe funkcje i ulepszenia formularzy systemu Windows na platformie .NET 8.

Podczas migracji z programu .NET Framework do platformy .NET 8 należy pamiętać o kilku zmianach powodujących niezgodność. Aby uzyskać więcej informacji, zobacz Zmiany powodujące niezgodność w formularzach systemu Windows.

Ulepszenia powiązania danych

Nowy aparat powiązania danych był w wersji zapoznawczej z platformą .NET 7 i jest teraz w pełni włączony na platformie .NET 8. Chociaż nie jest tak obszerny, jak istniejący aparat powiązania danych formularzy systemu Windows, ten nowy aparat jest modelowany po WPF, co ułatwia implementowanie zasad projektowania MVVM.

Ulepszone możliwości powiązania danych ułatwiają pełne korzystanie ze wzorca MVVM i stosowanie maperów relacyjnych obiektów z modelu ViewModels w formularzach systemu Windows. Zmniejsza to ilość kodu w plikach za pomocą kodu. Co ważniejsze, umożliwia udostępnianie kodu między formularzami systemu Windows i innymi platformami gui platform .NET, takimi jak WPF, UWP/WinUI i .NET MAUI. Należy pamiętać, że chociaż wcześniej wymienione struktury graficznego interfejsu użytkownika używają języka XAML jako technologii interfejsu użytkownika, język XAML nie przychodzi do systemu Windows Forms.

Interfejs IBindableComponent i BindableComponent klasa napędzają nowy system powiązań. Control implementuje interfejs i zapewnia nowe możliwości powiązania danych w formularzach systemu Windows.

Polecenia przycisku

Polecenia przycisków były w wersji zapoznawczej z platformą .NET 7 i są teraz w pełni włączone na platformie .NET 8. Podobnie jak WPF, wystąpienie obiektu, który implementuje ICommand interfejs, można przypisać do właściwości przycisku Command . Po kliknięciu przycisku jest wywoływane polecenie.

Opcjonalny parametr można podać po wywołaniu polecenia, określając wartość właściwości przycisku CommandParameter .

Właściwości Command i CommandParameter są ustawiane w projektancie za pośrednictwem okna Właściwości w obszarze (DataBindings), jak pokazano na poniższej ilustracji.

The Visual Studio properties window highlighting a Windows Forms' Button's Command and CommandParameter properties.

Przyciski nasłuchują ICommand.CanExecuteChanged również zdarzenia, co powoduje, że kontrolka wysyła zapytanie do ICommand.CanExecute metody. Gdy ta metoda zwraca truewartość , kontrolka jest włączona; kontrolka jest wyłączona po falsepowrocie.

Ulepszenia dpi programu Visual Studio

Program Visual Studio 2022 w wersji 17.8 wprowadza karty projektanta DPI bez ochrony. Wcześniej karta Projektant systemu Windows w programie Visual Studio była uruchamiana przy dpi programu Visual Studio. Powoduje to problemy podczas projektowania aplikacji WINDOWS Forms bez obsługi dpi. Teraz możesz upewnić się, że projektant działa na tej samej skali, co aplikacja ma być uruchamiana, z obsługą dpi lub nie. Przed wprowadzeniem tej funkcji trzeba było uruchomić program Visual Studio w trybie nieświadomym dpi, co sprawiło, że program Visual Studio był rozmyty podczas stosowania skalowania w systemie Windows. Teraz możesz pozostawić program Visual Studio sam i pozwolić projektantowi uruchomić dpi nieświadome.

Projektant dpi nieświadomy dla projektu Windows Forms można włączyć, dodając <ForceDesignerDPIUnaware> do pliku projektu i ustawiając wartość na true.

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

Ważne

Program Visual Studio odczytuje to ustawienie po załadowaniu projektu, a nie w przypadku jego zmiany. Po zmianie tego ustawienia zwolnij i ponownie załaduj projekt, aby program Visual Studio go szanował.

Ulepszenia wysokiej rozdzielczości DPI

Ulepszono renderowanie o wysokiej rozdzielczości PerMonitorV2 DPI:

  • Poprawnie skaluj zagnieżdżone kontrolki. Na przykład przycisk znajdujący się w panelu, który znajduje się na stronie karty.

  • Skalowanie Form.MaximumSize i Form.MinimumSize właściwości na podstawie bieżących ustawień DPI monitora.

    Począwszy od platformy .NET 8, ta funkcja jest domyślnie włączona i musisz zrezygnować z niej, aby powrócić do poprzedniego zachowania.

    Aby wyłączyć tę funkcję, dodaj wartość do configProperties ustawienia w pliku runtimeconfig.json i ustaw wartość false:System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi

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

Różne ulepszenia

Poniżej przedstawiono inne istotne zmiany:

  • Poprawiono kod, który obsłużył FolderBrowserDialog , naprawiając kilka przecieków pamięci.
  • Baza kodu formularzy systemu Windows powoli włącza wartość null w języku C#, wykorzeniając wszelkie potencjalne błędy odwołania o wartości null.
  • Kod System.Drawing źródłowy został zmigrowany do repozytorium GitHub formularzy systemu Windows.
  • Dostęp do nowoczesnych ikon systemu Windows można uzyskać za pomocą nowego interfejsu API. System.Drawing.SystemIcons.GetStockIcon Wyliczenie System.Drawing.StockIconId zawiera listę wszystkich dostępnych ikon systemowych.
  • Teraz więcej projektantów jest dostępnych w czasie wykonywania. Aby uzyskać więcej informacji, zobacz Problem z usługą GitHub #4908.