Pular para o conteúdo
Skillpedia
Apps de celular40 mil · #5422

winui3-migration-guide

Ajuda seu agente a migrar código de UWP para WinUI 3. Ele mostra como as APIs antigas se traduzem em novas, com exemplos de código.

O que ela faz

Este guia ajuda desenvolvedores a atualizar seus aplicativos antigos (UWP) para uma nova versão chamada WinUI 3. Ele mostra como mudar partes do código e corrigir erros comuns.

Quando usar

  • ✓Ao atualizar um aplicativo UWP para WinUI 3.
  • ✓Ao verificar se o código gerado pela IA usa as partes corretas do WinUI 3.
  • ✓Ao encontrar erros ao usar componentes como diálogos ou ao lidar com janelas.

Exemplo do que pedir para a IA

“Como eu mudo o namespace 'Windows.UI.Xaml' para 'Microsoft.UI.Xaml'?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/github/awesome-copilot/blob/main/skills/winui3-migration-guide/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/github/awesome-copilot/blob/main/skills/winui3-migration-guide/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O guia compara o código antigo (UWP) com o código novo (WinUI 3), mostrando as diferenças exatas, como mudanças de nomes e como lidar com janelas e diálogos.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add github/awesome-copilot --skill winui3-migration-guide

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/winui3-migration-guide/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Guia de Migração do WinUI 3

Use esta habilidade ao migrar aplicativos UWP para WinUI 3 / Windows App SDK, ou ao verificar se o código gerado usa as APIs corretas do WinUI 3 em vez de padrões UWP legados.


Mudanças de Namespace

Todos os namespaces Windows.UI.Xaml.* são movidos para Microsoft.UI.Xaml.*:

Namespace UWP Namespace WinUI 3
Windows.UI.Xaml Microsoft.UI.Xaml
Windows.UI.Xaml.Controls Microsoft.UI.Xaml.Controls
Windows.UI.Xaml.Media Microsoft.UI.Xaml.Media
Windows.UI.Xaml.Input Microsoft.UI.Xaml.Input
Windows.UI.Xaml.Data Microsoft.UI.Xaml.Data
Windows.UI.Xaml.Navigation Microsoft.UI.Xaml.Navigation
Windows.UI.Xaml.Shapes Microsoft.UI.Xaml.Shapes
Windows.UI.Composition Microsoft.UI.Composition
Windows.UI.Input Microsoft.UI.Input
Windows.UI.Colors Microsoft.UI.Colors
Windows.UI.Text Microsoft.UI.Text
Windows.UI.Core Microsoft.UI.Dispatching (para o dispatcher)

3 Principais Erros Comuns do Copilot

1. ContentDialog sem XamlRoot

// ❌ WRONG — Throws InvalidOperationException in WinUI 3
var dialog = new ContentDialog
{
    Title = "Error",
    Content = "Something went wrong.",
    CloseButtonText = "OK"
};
await dialog.ShowAsync();
// ✅ CORRECT — Set XamlRoot before showing
var dialog = new ContentDialog
{
    Title = "Error",
    Content = "Something went wrong.",
    CloseButtonText = "OK",
    XamlRoot = this.Content.XamlRoot  // Required in WinUI 3
};
await dialog.ShowAsync();

2. MessageDialog em vez de ContentDialog

// ❌ WRONG — UWP API, not available in WinUI 3 desktop
var dialog = new Windows.UI.Popups.MessageDialog("Are you sure?", "Confirm");
await dialog.ShowAsync();
// ✅ CORRECT — Use ContentDialog
var dialog = new ContentDialog
{
    Title = "Confirm",
    Content = "Are you sure?",
    PrimaryButtonText = "Yes",
    CloseButtonText = "No",
    XamlRoot = this.Content.XamlRoot
};
var result = await dialog.ShowAsync();
if (result == ContentDialogResult.Primary)
{
    // User confirmed
}

3. CoreDispatcher em vez de DispatcherQueue

// ❌ WRONG — CoreDispatcher does not exist in WinUI 3
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    StatusText.Text = "Done";
});
// ✅ CORRECT — Use DispatcherQueue
DispatcherQueue.TryEnqueue(() =>
{
    StatusText.Text = "Done";
});

// With priority:
DispatcherQueue.TryEnqueue(DispatcherQueuePriority.High, () =>
{
    ProgressBar.Value = 100;
});

Migração de Janelas

Referência de Janela

// ❌ WRONG — Window.Current does not exist in WinUI 3
var currentWindow = Window.Current;
// ✅ CORRECT — Use a static property in App
public partial class App : Application
{
    public static Window MainWindow { get; private set; }

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        MainWindow = new MainWindow();
        MainWindow.Activate();
    }
}
// Access anywhere: App.MainWindow

Gerenciamento de Janela

API UWP API WinUI 3
ApplicationView.TryResizeView() AppWindow.Resize()
AppWindow.TryCreateAsync() AppWindow.Create()
AppWindow.TryShowAsync() AppWindow.Show()
AppWindow.TryConsolidateAsync() AppWindow.Destroy()
AppWindow.RequestMoveXxx() AppWindow.Move()
AppWindow.GetPlacement() propriedade AppWindow.Position
AppWindow.RequestPresentation() AppWindow.SetPresenter()

Barra de Título

API UWP API WinUI 3
CoreApplicationViewTitleBar AppWindowTitleBar
CoreApplicationView.TitleBar.ExtendViewIntoTitleBar AppWindow.TitleBar.ExtendsContentIntoTitleBar

Migração de Diálogos e Seletores

Seletores de Arquivo/Pasta

// ❌ WRONG — UWP style, no window handle
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".txt");
var file = await picker.PickSingleFileAsync();
// ✅ CORRECT — Initialize with window handle
var picker = new FileOpenPicker();
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow);
WinRT.Interop.InitializeWithWindow.Initialize(picker, hwnd);
picker.FileTypeFilter.Add(".txt");
var file = await picker.PickSingleFileAsync();

Migração de Threads

Padrão UWP Equivalente WinUI 3

…

Perguntas frequentes

Por que o 'ContentDialog' não funciona mais como antes?

No WinUI 3, você precisa definir a propriedade 'XamlRoot' antes de mostrar um 'ContentDialog'. O guia mostra como fazer isso.

Onde está o 'MessageDialog'?

O 'MessageDialog' não existe mais no WinUI 3 para aplicativos de desktop. Você deve usar o 'ContentDialog' em vez disso, e o guia explica como.

Como eu atualizo o texto na tela de outro lugar?

No WinUI 3, use 'DispatcherQueue.TryEnqueue' em vez do antigo 'Dispatcher.RunAsync' para garantir que a atualização aconteça na linha de execução correta.

Detalhes

Descrição original do autor

UWP-to-WinUI 3 migration reference. Maps legacy UWP APIs to correct Windows App SDK equivalents with before/after code snippets. Covers namespace changes, threading (CoreDispatcher to DispatcherQueue), windowing (CoreWindow to AppWindow), dialogs, pickers, sharing, printing, background tasks, and the most common Copilot code generation mistakes.

repo: github/awesome-copilot

Popularidade

Estrelas no GitHub
40 mil
Posição no ranking
#5422
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas