Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

winui3-migration-guide

UWP から WinUI 3 への移行リファレンス。レガシー UWP API を Windows App SDK の対応する正しい API にマッピングし、変更前後のコードスニペットを提示します。名前空間の変更、スレッド処理(CoreDispatcher から DispatcherQueue)、ウィンドウ管理(CoreWindow から AppWindow)、ダイアログ、ピッカー、共有、印刷、バックグラウンドタスク、そして Copilot のコード生成でよく発生するミスへの対処法を網羅しています。

description の原文を見る

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.

SKILL.md 本文

WinUI 3 マイグレーション ガイド

UWP アプリを WinUI 3 / Windows App SDK に移行する場合、または生成されたコードが従来の UWP パターンではなく正しい WinUI 3 API を使用していることを確認する場合に、このスキルを使用します。


名前空間の変更

すべての Windows.UI.Xaml.* 名前空間は Microsoft.UI.Xaml.* に移行されます:

UWP 名前空間WinUI 3 名前空間
Windows.UI.XamlMicrosoft.UI.Xaml
Windows.UI.Xaml.ControlsMicrosoft.UI.Xaml.Controls
Windows.UI.Xaml.MediaMicrosoft.UI.Xaml.Media
Windows.UI.Xaml.InputMicrosoft.UI.Xaml.Input
Windows.UI.Xaml.DataMicrosoft.UI.Xaml.Data
Windows.UI.Xaml.NavigationMicrosoft.UI.Xaml.Navigation
Windows.UI.Xaml.ShapesMicrosoft.UI.Xaml.Shapes
Windows.UI.CompositionMicrosoft.UI.Composition
Windows.UI.InputMicrosoft.UI.Input
Windows.UI.ColorsMicrosoft.UI.Colors
Windows.UI.TextMicrosoft.UI.Text
Windows.UI.CoreMicrosoft.UI.Dispatching (ディスパッチャー用)

Copilot の最も一般的な 3 つのミス

1. XamlRoot がない ContentDialog

// ❌ 間違い — WinUI 3 で InvalidOperationException をスロー
var dialog = new ContentDialog
{
    Title = "Error",
    Content = "Something went wrong.",
    CloseButtonText = "OK"
};
await dialog.ShowAsync();
// ✅ 正解 — 表示前に XamlRoot を設定
var dialog = new ContentDialog
{
    Title = "Error",
    Content = "Something went wrong.",
    CloseButtonText = "OK",
    XamlRoot = this.Content.XamlRoot  // WinUI 3 では必須
};
await dialog.ShowAsync();

2. ContentDialog の代わりに MessageDialog を使用

// ❌ 間違い — UWP API、WinUI 3 デスクトップでは使用不可
var dialog = new Windows.UI.Popups.MessageDialog("Are you sure?", "Confirm");
await dialog.ShowAsync();
// ✅ 正解 — 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)
{
    // ユーザーが確認
}

3. DispatcherQueue の代わりに CoreDispatcher を使用

// ❌ 間違い — CoreDispatcher は WinUI 3 に存在しない
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    StatusText.Text = "Done";
});
// ✅ 正解 — DispatcherQueue を使用
DispatcherQueue.TryEnqueue(() =>
{
    StatusText.Text = "Done";
});

// 優先度付き:
DispatcherQueue.TryEnqueue(DispatcherQueuePriority.High, () =>
{
    ProgressBar.Value = 100;
});

ウィンドウ化マイグレーション

ウィンドウ参照

// ❌ 間違い — Window.Current は WinUI 3 に存在しない
var currentWindow = Window.Current;
// ✅ 正解 — App で静的プロパティを使用
public partial class App : Application
{
    public static Window MainWindow { get; private set; }

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        MainWindow = new MainWindow();
        MainWindow.Activate();
    }
}
// どこからでもアクセス: App.MainWindow

ウィンドウ管理

UWP APIWinUI 3 API
ApplicationView.TryResizeView()AppWindow.Resize()
AppWindow.TryCreateAsync()AppWindow.Create()
AppWindow.TryShowAsync()AppWindow.Show()
AppWindow.TryConsolidateAsync()AppWindow.Destroy()
AppWindow.RequestMoveXxx()AppWindow.Move()
AppWindow.GetPlacement()AppWindow.Position プロパティ
AppWindow.RequestPresentation()AppWindow.SetPresenter()

タイトル バー

UWP APIWinUI 3 API
CoreApplicationViewTitleBarAppWindowTitleBar
CoreApplicationView.TitleBar.ExtendViewIntoTitleBarAppWindow.TitleBar.ExtendsContentIntoTitleBar

ダイアログとピッカーのマイグレーション

ファイル/フォルダ ピッカー

// ❌ 間違い — UWP スタイル、ウィンドウ ハンドルなし
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".txt");
var file = await picker.PickSingleFileAsync();
// ✅ 正解 — ウィンドウ ハンドルで初期化
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();

スレッド処理マイグレーション

UWP パターンWinUI 3 同等物
CoreDispatcher.RunAsync(priority, callback)DispatcherQueue.TryEnqueue(priority, callback)
Dispatcher.HasThreadAccessDispatcherQueue.HasThreadAccess
CoreDispatcher.ProcessEvents()同等物なし — 非同期コードをリストラクチャ
CoreWindow.GetForCurrentThread()利用不可 — DispatcherQueue.GetForCurrentThread() を使用

主な違い: UWP は ASTA (Application STA) を使用し、ビルトインの再入可能性ブロック機能を持ちます。WinUI 3 は標準 STA を使用し、この保護機能がありません。非同期コードがメッセージをポンプする場合、再入可能性の問題に注意してください。


バックグラウンド タスク マイグレーション

// ❌ 間違い — UWP IBackgroundTask
public sealed class MyTask : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance) { }
}
// ✅ 正解 — Windows App SDK AppLifecycle
using Microsoft.Windows.AppLifecycle;

// アクティベーションを登録
var args = AppInstance.GetCurrent().GetActivatedEventArgs();
if (args.Kind == ExtendedActivationKind.AppNotification)
{
    // バックグラウンド アクティベーションを処理
}

アプリ設定マイグレーション

シナリオパッケージ化されたアプリパッケージ化されていないアプリ
シンプルな設定ApplicationData.Current.LocalSettingsLocalApplicationData の JSON ファイル
ローカル ファイル ストレージApplicationData.Current.LocalFolderEnvironment.GetFolderPath(SpecialFolder.LocalApplicationData)

GetForCurrentView() の置き換え

すべての GetForCurrentView() パターンは WinUI 3 デスクトップ アプリでは使用不可能です:

UWP APIWinUI 3 置き換え
UIViewSettings.GetForCurrentView()AppWindow プロパティを使用
ApplicationView.GetForCurrentView()AppWindow.GetFromWindowId(windowId)
DisplayInformation.GetForCurrentView()Win32 GetDpiForWindow() または XamlRoot.RasterizationScale
CoreApplication.GetCurrentView()利用不可 — ウィンドウを手動で追跡
SystemNavigationManager.GetForCurrentView()NavigationView で戻るナビゲーションを直接処理

テスト マイグレーション

UWP 単体テスト プロジェクトは WinUI 3 では機能しません。WinUI 3 テスト プロジェクト テンプレートに移行する必要があります。

UWPWinUI 3
Unit Test App (Universal Windows)Unit Test App (WinUI in Desktop)
UWP タイプを持つ標準 MSTest プロジェクトXAML ランタイム用に WinUI テスト アプリを使用する必要があります
すべてのテストで [TestMethod]ロジックには [TestMethod]、XAML/UI テストには [UITestMethod]
Class Library (Universal Windows)Class Library (WinUI in Desktop)
// ✅ WinUI 3 単体テスト — XAML と連携する場合は [UITestMethod] を使用
[UITestMethod]
public void TestMyControl()
{
    var control = new MyLibrary.MyUserControl();
    Assert.AreEqual(expected, control.MyProperty);
}

重要: [UITestMethod] 属性はテスト ランナーに対して、XAML UI スレッドでテストを実行するよう指示します。これは任意の Microsoft.UI.Xaml タイプをインスタンス化するために必要です。


マイグレーション チェックリスト

  1. すべての Windows.UI.Xaml.* using ディレクティブを Microsoft.UI.Xaml.* で置き換え
  2. Windows.UI.ColorsMicrosoft.UI.Colors で置き換え
  3. CoreDispatcher.RunAsyncDispatcherQueue.TryEnqueue で置き換え
  4. Window.CurrentApp.MainWindow 静的プロパティで置き換え
  5. すべての ContentDialog インスタンスに XamlRoot を追加
  6. すべてのピッカーを InitializeWithWindow.Initialize(picker, hwnd) で初期化
  7. MessageDialogContentDialog で置き換え
  8. ApplicationView/CoreWindowAppWindow で置き換え
  9. CoreApplicationViewTitleBarAppWindowTitleBar で置き換え
  10. すべての GetForCurrentView() 呼び出しを AppWindow 同等物で置き換え
  11. Share and Print managers の相互運用を更新
  12. IBackgroundTaskAppLifecycle アクティベーションで置き換え
  13. プロジェクト ファイルを更新: TFM を net10.0-windows10.0.22621.0 に、<UseWinUI>true</UseWinUI> を追加
  14. 単体テストを Unit Test App (WinUI in Desktop) プロジェクトに移行; XAML テストには [UITestMethod] を使用
  15. パッケージ化および非パッケージ化の両方の構成をテスト

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
github
リポジトリ
github/awesome-copilot
ライセンス
MIT
最終更新
不明

Source: https://github.com/github/awesome-copilot / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: github · github/awesome-copilot · ライセンス: MIT