Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece uma visão geral de alto nível do que há de novo com Windows Forms (WinForms) no .NET 11 Preview. Para obter informações detalhadas, consulte anúncios de lançamento. Use os comunicados de versão para obter uma visão geral de toda a versão .NET 11. O restante deste artigo destaca as alterações mais importantes para Windows Forms.
.NET 11 Versão Prévia 7 foi lançado em agosto de 2026.
Anúncios de Lançamento
Cada comunicado de versão fornece informações detalhadas sobre as alterações do Windows Forms para o .NET 11.
- .NET 11 Versão Prévia 7
- .NET 11 Versão Prévia 6
- .NET 11 Versão Prévia 5
- .NET 11 Versão Prévia 4
- .NET 11 Versão Prévia 3
- .NET 11 Versão Prévia 2
- .NET 11 Versão Prévia 1
Estilos visuais e aparência
System.Windows.Forms.Application.SetDefaultVisualStylesMode e a nova propriedade System.Windows.Forms.Control.VisualStylesMode permitem que você adote um pipeline de renderização renovado nos níveis de aplicativo e de controle. Escolha entre o renderizador clássico (VisualStylesMode.Classic), os estilos visuais desativados inteiramente (VisualStylesMode.Disabled) e o renderizador moderno (VisualStylesMode.Net11).
VisualStylesMode.Latest é sempre convertido para o modo mais recente compatível com o runtime. Os controles filhos têm como padrão VisualStylesMode.Inherit, de modo que a configuração é propagada do pai para o filho.
O Net11 modo traz renderização modernizada para Button, CheckBox, , RadioButton, GroupBoxe TextBoxRichTextBox. A FlatStyle propriedade em botões e caixas de seleção e a BorderStyle propriedade em caixas de texto definem o estilo de renderização. A Grade de Propriedades agora expõe a propriedade Padding em caixas de texto e caixas de texto rich text, e a aplica quando VisualStylesMode é Net11 ou mais recente.
Control.VisualStylesMode é uma propriedade ambiente, semelhante a BackColor ou Font. A resolução percorre a cadeia hierárquica superior e, ao atingir o nível mais alto, desce para Application.DefaultVisualStylesMode. Chame Control.GetVisualStylesModeChangeImpact para verificar o que precisa ser atualizado quando os modos mudam e use a propriedade Control.EffectiveVisualStylesMode para obter o valor resolvido após a herança.
using System.Windows.Forms;
Application.SetDefaultVisualStylesMode(VisualStylesMode.Net11);
Form form = new()
{
Text = "Modern visual styles",
VisualStylesMode = VisualStylesMode.Latest,
};
ComboBox combo = new() { Dock = DockStyle.Top };
combo.Items.AddRange(["One", "Two", "Three"]);
form.Controls.Add(combo);
Application.Run(form);
Reagir às configurações visuais do sistema
System.Windows.Forms.Application.SystemVisualSettings expõe a cor de destaque, o estado de alto contraste, a visibilidade de indicadores de teclado, as configurações de animação da área do cliente, as métricas da borda de foco e o fator de escala de texto como um único snapshot. O novo evento System.Windows.Forms.Application.SystemVisualSettingsChanged é disparado sempre que uma dessas categorias é alterada, para que você possa atualizar apenas a interface do usuário afetada em vez de recriar os recursos do tema a cada notificação.
System.Windows.Forms.SystemVisualSettingsChangedEventArgs.Changed é um valor de SystemVisualSettingsCategories sinalizadores que indica quais categorias foram alteradas. Os controles podem substituir OnSystemVisualSettingsChanged para responder localmente.
using System.Drawing;
using System.Windows.Forms;
Application.SystemVisualSettingsChanged += (sender, e) =>
{
if ((e.Changed & SystemVisualSettingsCategories.AccentColor) != 0)
{
Color accent = e.NewSettings.AccentColor;
Console.WriteLine($"Accent color changed to {accent}.");
}
if ((e.Changed & SystemVisualSettingsCategories.TextScale) != 0)
{
Console.WriteLine($"Text scale is now {e.NewSettings.TextScaleFactor:P0}.");
}
};
Exibição postergada do formulário
System.Windows.Forms.FormRevealMode fornece aos aplicativos controle sobre quando um formulário fica visível durante a inicialização.
FormRevealMode.Deferred mantém um formulário oculto até que seu layout inicial e a aplicação de temas sejam consolidados, evitando o breve lampejo de uma janela sem estilo quando o modo escuro ou os novos estilos visuais são aplicados após a exibição inicial do formulário.
FormRevealMode.Classic preserva o comportamento existente de mostrar imediatamente, e FormRevealMode.Inherit segue o valor definido com Application.SetDefaultFormRevealMode. Chame Application.IsFormRevealDeferred para obter o estado resolvido e manipule o Form.FormRevealModeChanged evento quando o valor for alterado.
using System.Windows.Forms;
Application.SetDefaultVisualStylesMode(VisualStylesMode.Net11);
Application.SetDefaultFormRevealMode(FormRevealMode.Deferred);
Form form = new() { Text = "No unstyled flash on startup" };
Application.Run(form);
Suspender a renderização durante mutações em lote
A nova interface System.Windows.Forms.ISupportSuspendPainting e o método de extensão ControlMutationExtensions.SuspendPainting combinam BeginUpdate/EndUpdate e SuspendLayout/ResumeLayout em um único escopo IDisposable.
LayoutSuspendTraversal controla se a suspensão aplica-se somente ao alvo ou ao alvo e a todos os seus descendentes. Essa abordagem é útil ao aplicar alterações a contêineres TableLayoutPanel aninhados com dimensionamento automático, situação em que a suspensão evita "tempestades de layout" e cintilação.
ComboBox, ListBox, ListView, RichTextBox e TreeView agora implementam ISupportSuspendPainting. Eles direcionam seus padrões de suspensão estabelecidos (BeginUpdate/EndUpdate) por meio da nova interface, de modo que edições em massa evitam cintilações sem a necessidade de gerenciar múltiplas chamadas pareadas. Para todos os outros controles, o comportamento de suspensão é novo.
using System.Windows.Forms;
ListBox list = new();
using (list.SuspendPainting(LayoutSuspendTraversal.Target))
{
for (int i = 0; i < 10_000; i++)
{
list.Items.Add($"Item {i}");
}
}
Aparência de chave seletora (toggle switch) para CheckBox e RadioButton
System.Windows.Forms.Appearance.ToggleSwitch é um novo valor para CheckBox.Appearance, que exibe o controle como um interruptor em VisualStylesMode.Net11. Os elementos existentes Checked, CheckedChanged e o comportamento de vinculação de dados permanecem inalterados, portanto, você não precisa fazer alterações no código ao mudar CheckBox para a nova aparência. Você pode modernizar os controles de caixa de seleção para se alinhar às convenções de interface do usuário contemporâneas sem encontrar alterações significativas.
using System.Windows.Forms;
CheckBox toggle = new()
{
Text = "Enable notifications",
Appearance = Appearance.ToggleSwitch,
Checked = true,
};
Importante
O comportamento de renderização dos Estilos Visuais e das novas APIs associadas ainda não está definido e continua mudando até que o .NET 11 atinja a disponibilidade geral (GA). Com base em testes exploratórios e comentários do cliente, os controles que usam configurações de Estilo Visual não clássico podem ocupar mais ou menos espaço nas próximas .NET 11 versões (RC, GA) do que na Versão Prévia 7. O comportamento das novas APIs também pode mudar em detalhes ou em cenários específicos.
Por esse motivo, evite o design pixel-perfect ao adotar esses recursos. Prefira abordagens baseadas em layout usando TableLayoutPanel e FlowLayoutPanelque se adaptem automaticamente às alterações nas métricas de controle.
Área de transferência
Clipboard.GetText com TextDataFormat.Rtf agora lê corretamente os dados RTF da área de transferência que não incluem um terminador nulo. Essa correção resolve um problema em que o conteúdo RTF válido copiado de aplicativos como PowerPoint retornava uma cadeia de caracteres vazia.
GetDataObject() retorna um
IDataObjectque pode conter dados de bitmap posicionados na área de transferência, e GetImage() recupera a imagem de bitmap desse objeto de dados. GetImage() também recupera a imagem diretamente da área de transferência. GetImage() agora recupera imagens por meio do pipeline de área de transferência do tipo chamandoTryGetData<Image>(DataFormats.Bitmap, autoConvert: true, ...)e retornandonullquando não consegue recuperar uma imagem.O código a seguir agora preserva a integridade de imagens bitmap (ida e volta) quando
bitmapé um Bitmap existente e você obtém a imagem por meio do objeto de dados retornado:// Round-trips again on .NET 11 Clipboard.SetImage(bitmap); Image? image = Clipboard.GetDataObject()?.GetImage();
ToolStrip
ToolStripDropDown agora preserva o rastreamento de menus modais durante alterações de foco, de modo que a interface de SmartTags e menus suspensos seja fechada normalmente quando os usuários alternam entre guias ou movem o foco para outros controles. Isso corrige uma regressão que fazia com que os menus suspensos permanecessem abertos indevidamente.
ToolStrip controles com
TabStop=truenão ativam mais incorretamente o gerenciamento do menu após navegar com a tecla Tab. Anteriormente, esse comportamento impedia que controles como TreeView recebessem entrada das teclas de seta.A rolagem de ToolStripDropDownMenu agora respeita corretamente as alças do menu, sem rolar além delas nem fechar involuntariamente o menu suspenso.
ToolStrip As alterações de DPI agora preservam a DPI do dispositivo anterior durante o caminho de alteração de DPI, portanto, a lógica de dimensionamento é executada corretamente quando você move os controles entre exibições com configurações de DPI diferentes.
Layout
-
AnchorLayoutV2agora inicializa corretamente os metadados de âncora ausentes quando os controles ancorados são substituídos durante uma passagem de layout suspenso, evitando inconsistências de layout.
Desenhista
Os designers de Windows Forms hospedados agora podem colar controles por meio de
CommandSet.OnMenuPastenovamente, restaurando a funcionalidade de colagem que foi interrompida anteriormente.As legendas do editor de coleção para controles personalizados agora exibem o tipo de controle subjacente em vez do nome do wrapper gerado
ControlProxy<T>, facilitando a identificação de controles no designer.
PropertyGrid
- PropertyGrid.SelectedTab agora é atualizado corretamente quando PropertyGrid.SelectedObject é atribuído.
Modo escuro
- ProgressBar agora tem cores de primeiro plano e plano de fundo padrão para renderização do modo escuro, melhorando a consistência visual em aplicativos com temas fluentes.
Correções de erros
Control: A regressão na análise sequencial de modificadores imediatos SendKeys (como
^a^c,+a+c,%f%t) foi corrigida. OKeyboardToolTipStateMachinenão lança maisKeyNotFoundExceptionquando o foco muda durante um evento de exibição de tooltip.ListBox: os valores de
IsSynchronizedagora estão corretos em todas as coleçõesListBox.NumericUpDown: Foi corrigida a regressão na renderização de botões que ocorria quando os estilos visuais estavam desabilitados.
SplitContainer: o controle agora lida com uma exceção transitória do GDI+
ExternalExceptiondurante a transição da sessão de exibição ao chamarRepaintSplitterRect.ToolStrip: o botão de rolar para baixo não gera mais erro ao rolar. Os ícones
ToolStripMenuItemindeterminados e marcados agora estão visíveis no modo escuro.PropertyGrid: o ícone do botão da página de propriedades não muda mais ao alternar
LargeButtonsem telas de DPI alto.ResetHelpForeColoragora redefine corretamente a cor do primeiro plano em vez da cor da tela de fundo.PrintPreviewControl:
ForeColora renderização agora está correta quando definida como Branca.Modo escuro:
LinkLabelo contraste no Modo Escuro é aprimorado.TabControlaninhado emSplitContaineragora corresponde ao modo escuro.HelpProviderO texto agora está visível no modo escuro.ToolTipagora alterna para o modo escuro quandoSystemColorMode.Darké definido.
.NET Desktop feedback