Novedades de .NET 8 (Windows Forms .NET)

En este artículo se describen algunas de las nuevas características y mejoras de Windows Forms en .NET 8.

Hay algunos cambios importantes que debe tener en cuenta al migrar de .NET Framework a .NET 8. Para obtener más información, vea Cambios importantes en Windows Forms.

Mejoras en el enlace de datos

Un nuevo motor de enlace de datos estaba en versión preliminar con .NET 7 y ahora está totalmente habilitado en .NET 8. Aunque no tan extenso como el motor de enlace de datos de Windows Forms existente, este nuevo motor se modela después de WPF, lo que facilita la implementación de principios de diseño de MVVM.

Las funcionalidades de enlace de datos mejoradas facilitan el uso completo del patrón MVVM y emplean asignadores relacionales de objetos de ViewModels en Windows Forms. Esto reduce la cantidad de código en archivos de código subyacente. Lo más importante es que habilita el uso compartido de código entre Windows Forms y otros marcos de GUI de .NET, como WPF, UWP/WinUI y .NET MAUI. Es importante tener en cuenta que, aunque los marcos de GUI mencionados anteriormente usan XAML como tecnología de interfaz de usuario, XAML no llega a Windows Forms.

La interfaz IBindableComponent y la clase BindableComponent impulsan el nuevo sistema de enlace. Control implementa la interfaz y proporciona nuevas funcionalidades de enlace de datos a Windows Forms.

Comandos de botón

Los comandos de botón estaban en versión preliminar con .NET 7 y ahora están totalmente habilitados en .NET 8. De forma similar a WPF, la instancia de un objeto que implementa la ICommand interfaz se puede asignar a la propiedad del Command botón. Cuando se hace clic en el botón, se invoca el comando.

Se puede proporcionar un parámetro opcional cuando se invoca el comando, especificando un valor para la propiedad del CommandParameter botón.

Las propiedades Command y CommandParameter se establecen en el diseñador a través de la ventana Propiedades , en (DataBindings), como se muestra en la siguiente imagen.

Ventana de propiedades de Visual Studio que resalta las propiedades Command y CommandParameter de un botón de Windows Forms.

Los botones también escuchan el eventoICommand.CanExecuteChanged , lo que hace que el control consulte el método ICommand.CanExecute. Cuando ese método devuelve true, el control está habilitado; el control se deshabilita cuando se devuelve false.

Mejoras de DPI de Visual Studio

Visual Studio 2022 17.8 Introduce pestañas de diseño sin DPI. Anteriormente, la pestaña Diseñador de Windows de Visual Studio se ejecutó en el DPI de Visual Studio. Esto provoca problemas al diseñar una aplicación de Windows Forms no reconoce de DPI. Ahora puede asegurarse de que el diseñador se ejecuta a la misma escala que quiere que se ejecute la aplicación, ya sea compatible con DPI-aware o no. Antes de introducir esta característica, tenía que ejecutar Visual Studio en modo no reconoce el DPI, lo que hizo que Visual Studio se difuminase al aplicar el escalado en Windows. Ahora puede dejar Visual Studio solo y dejar que el diseñador ejecute DPI-no reconoce.

Puede habilitar el diseñador no reconoce de DPI para el proyecto de Windows Forms agregando <ForceDesignerDPIUnaware> al archivo de proyecto y estableciendo el valor en 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>

Importante

Visual Studio lee esta configuración cuando se carga el proyecto y no cuando se cambia. Después de cambiar esta configuración, descargue y vuelva a cargar el proyecto para que Visual Studio lo respete.

Mejoras de PPP elevado

Se ha mejorado la representación de un valor PPP elevado con PerMonitorV2:

  • Escale correctamente los controles anidados. Por ejemplo, un botón que se encuentra en un panel que, a su vez, se coloca en una página de pestañas.

  • Escalado Form.MaximumSize y Form.MinimumSize propiedades en función de la configuración actual de DPI del monitor.

    A partir de .NET 8, esta característica está habilitada de forma predeterminada y debe optar por no participar para revertir al comportamiento anterior.

    Para deshabilitar la característica, agregue System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi a la configProperties configuración en runtimeconfig.jsony establezca el valor en false:

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

Otras mejoras

Estos son otros cambios importantes:

  • El código que se manipuló FolderBrowserDialog se ha mejorado, corrigiendo algunas fugas de memoria.
  • La base de código para Windows Forms ha estado habilitando lentamente la nulabilidad de C#, raízndo los posibles errores de referencia null.
  • El código fuente System.Drawing se migró al repositorio de GitHub de Windows Forms.
  • Se puede acceder a los iconos modernos de Windows mediante una nueva API, System.Drawing.SystemIcons.GetStockIcon. La enumeración System.Drawing.StockIconId lista todos los iconos del sistema disponibles.
  • Ahora hay más diseñadores disponibles en tiempo de ejecución. Para obtener más información, consulteproblema de GitHub n.º 4908.