Menggunakan SDK Aplikasi Windows di aplikasi WPF

SDK Aplikasi Windows adalah evolusi berikutnya dalam platform pengembangan aplikasi Windows. Tetapi topik ini menunjukkan cara Anda dapat menggunakan API SDK Aplikasi Windows (dan API Windows Runtime) di aplikasi Windows Presentation Foundation (WPF)!

  • Dalam banyak kasus, Anda harus membuat ulang aplikasi WPF dalam bentuk aplikasi WinUI 3. Salah satu keuntungan dari pindah ke WinUI adalah memiliki akses ke Fluent Design System (lihat juga Desain dan kode aplikasi Windows). Dan WinUI adalah bagian dari SDK Aplikasi Windows—jadi, secara alami, aplikasi WinUI juga dapat menggunakan fitur dan API SDK Aplikasi Windows lainnya. Topik ini tidak mencakup proses migrasi aplikasi WPF Anda ke WinUI.
  • Tetapi jika Anda menemukan bahwa Anda menggunakan fitur WPF yang belum tersedia di WinUI, maka Anda masih dapat menggunakan fitur SDK Aplikasi Windows (seperti Siklus Hidup Aplikasi, MRT Core, DWriteCore, dan lainnya) di aplikasi WPF Anda. Topik ini menunjukkan caranya.

Dan jika Anda belum memiliki proyek WPF yang sudah ada—atau Anda ingin mempraktikkan prosesnya—topik ini mencakup langkah-langkah untuk membuat proyek WPF sehingga Anda dapat mengikuti dan mengonfigurasinya untuk memanggil API SDK Aplikasi Windows.

Prasyarat

  1. Pasang perangkat untuk SDK Aplikasi Windows.
  2. Topik ini mencakup aplikasi WPF tanpa kemasan dan dengan kemasan. Jika aplikasi WPF Anda tidak dikemas (yang merupakan default untuk aplikasi WPF), pastikan semua dependensi untuk aplikasi tidak dikemas sudah diinstal (lihat panduan penyebaran SDK Aplikasi Windows untuk aplikasi yang bergantung pada kerangka kerja yang dikemas dengan lokasi eksternal atau tidak dikemas). Cara cepat untuk melakukannya adalah dengan mengunjungi Unduhan terbaru untuk SDK Aplikasi Windows, lalu mengunduh, mengekstrak, dan menjalankan salah satu unduhan rilis stabil Runtime.

Penting

Versi Runtime yang Anda instal harus sesuai dengan versi Microsoft. Paket WindowsAppSDK NuGet yang akan Anda instal di langkah selanjutnya.

Untuk informasi selengkapnya tentang istilah yang tidak dikemas dan dikemas, lihat Keuntungan dan kekurangan pengemasan aplikasi Anda.

Membuat proyek WPF jika Anda belum memilikinya

Jika Anda sudah memiliki proyek WPF, maka Anda dapat melanjutkan ke bagian berikutnya.

  1. Di Visual Studio, buat proyek C# WPF Application baru (yang merupakan proyek .NET). Berhati-hatilah bahwa Anda memilih templat proyek dengan nama yang tepat WPF Application, dan bukan WPF App (.NET Framework).
  2. Beri nama project, dan terima opsi default apa pun.

Anda sekarang memiliki proyek yang membangun aplikasi WPF yang belum dalam paket.

Mengonfigurasi proyek WPF Anda untuk dukungan SDK Aplikasi Windows

Pertama, kita akan mengedit file project.

  1. Di Penjelajah Solusi, klik kanan project Anda, dan pilih Edit File Project.

  2. Langkah ini memungkinkan Anda memanggil API Windows Runtime (WinRT) (termasuk API SDK Aplikasi Windows). Di dalam elemen PropertyGroup adalah elemen TargetFramework, yang diatur ke nilai seperti net6.0. Tambahkan sebuah moniker ke nilai kerangka kerja sasaran itu (khususnya, Moniker Kerangka Kerja Sasaran). Misalnya, gunakan hal berikut jika aplikasi Anda menargetkan Windows 10, versi 2004:

    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
  3. Juga di dalam elemen PropertyGroup, tambahkan elemen RuntimeIdentifiers, seperti yang ditunjukkan di bawah ini. Jika Anda menargetkan .NET 8 atau yang lebih baru, gunakan nilai win-x86;win-x64;win-arm64 sebagai gantinya.

    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    
  4. Secara default, aplikasi WPF tidak dikemas (artinya tidak diinstal dengan menggunakan MSIX). Aplikasi yang tidak dikemas harus menginisialisasi runtime SDK Aplikasi Windows sebelum menggunakan fitur lain dari SDK Aplikasi Windows. Anda dapat melakukannya secara otomatis saat aplikasi dimulai melalui inisialisasi otomatis. Anda cukup mengatur (juga di dalam elemen PropertyGroup) properti project WindowsPackageType dengan tepat, seperti ini:

    <WindowsPackageType>None</WindowsPackageType>
    

    Jika Anda memiliki kebutuhan lanjutan (seperti penanganan kesalahan kustom, atau untuk memuat versi SDK Aplikasi Windows tertentu), maka alih-alih auto-initialization Anda dapat memanggil API bootstrapper secara eksplisit—untuk informasi selengkapnya, lihat Gunakan runtime SDK Aplikasi Windows untuk aplikasi yang dikemas dengan lokasi eksternal atau dibongkar.

  5. Simpan dan tutup file project.

Selanjutnya, kita akan menginstal paket NuGet SDK Aplikasi Windows dalam proyek.

  1. Di Penjelajah Solusi, klik kanan simpul Dependensi proyek Anda, dan pilih Kelola Paket Nuget... .
  2. Di jendela NuGet Package Manager, pilih tab Browse, dan instal paket Versi stabil terbaruMicrosoft.WindowsAppSDK.

Menggunakan beberapa fitur SDK Aplikasi Windows di aplikasi WPF Anda

Bagian ini menawarkan contoh yang sangat sederhana untuk memanggil API SDK Aplikasi Windows dari aplikasi WPF. Ini menggunakan fitur MRT Core (lihat Mengelola sumber daya dengan MRT Core). Jika contoh ini berfungsi untuk proyek WPF Anda (dan jika Anda membuat yang baru untuk panduan ini, maka itu akan), maka Anda dapat mengikuti langkah-langkah ini.

  1. Tambahkan markup berikut ke MainWindow.xaml (Anda dapat menempelkannya di dalam Root Grid):

    <StackPanel>
        <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button>
        <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock>
    </StackPanel>
    
  2. Sekarang kita akan menambahkan beberapa kode yang menggunakan kelas ResourceManager di SDK Aplikasi Windows untuk memuat sumber daya string.

    1. Tambahkan item Resources File (.resw) baru ke project Anda (biarkan dengan nama default Resources.resw).

    2. Dengan file sumber daya terbuka di editor, buat sumber daya string baru dengan properti berikut.

      • Nama: Pesan
      • Nilai: Halo, sumber daya!
    3. Simpan dan tutup file sumber daya.

    4. Di MainWindow.xaml.cs, tambahkan penanganan aktivitas berikut:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Construct a resource manager using the resource index generated during build.
        var manager = 
          new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
    
        // Look up a string in the resources file using the string's name.
        myTextBlock.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  3. Buat project, dan jalankan aplikasi. Klik tombol untuk melihat string Hello, resources! yang ditampilkan.

Petunjuk / Saran

Jika pada runtime Anda melihat kotak pesan yang menunjukkan bahwa aplikasi memerlukan versi Windows App Runtime tertentu, dan menanyakan apakah Anda ingin menginstalnya sekarang, lalu klik Yes. Itu akan membawa Anda ke Unduhan terbaru untuk SDK Aplikasi Windows. Untuk informasi selengkapnya, lihat bagian Prasyarat di atas.

Lihat juga arsitektur Runtime untuk mempelajari selengkapnya tentang Framework dependensi paket yang dibutuhkan aplikasi Anda saat menggunakan SDK Aplikasi Windows, dan komponen tambahan yang diperlukan untuk bekerja di aplikasi yang tidak dikemas.

Mengemas dan menyebarkan aplikasi WPF Anda dengan MSIX

Beberapa fitur Windows dan API mengharuskan aplikasi Anda memiliki identitas paket saat runtime (dengan kata lain, aplikasi Anda harus paket). Untuk informasi selengkapnya, lihat Fitur yang memerlukan identitas paket. Kemasan MSIX juga diperlukan untuk pengiriman berbasis MSIX ke Microsoft Store.

  1. Di Penjelajah Solusi di Visual Studio, klik kanan solusi, dan pilih Tambahkan>Baru Project... .
  2. Dalam kotak dialog Tambahkan project baru, cari packaging, pilih templat C# Windows Application Packaging Project project, dan klik Baru.
  3. Beri nama project, dan klik Buat.
  4. Kami ingin menentukan aplikasi mana dalam solusi yang akan disertakan dalam paket. Jadi dalam proyek pengemasan (tidak proyek WPF), klik kanan pada simpul Dependensi, dan pilih opsi Tambahkan referensi proyek....
  5. Dalam daftar proyek dalam solusi, pilih proyek WPF Anda, dan klik OK.
  6. Perluas simpul Dependencies>Applications, dan konfirmasikan bahwa proyek WPF Anda disorot tebal dan direferensikan. Ini berarti bahwa itu akan digunakan sebagai titik awal untuk paket.
  7. Klik kanan project kemasan, dan pilih Set As Startup Project.
  8. Klik kanan WPF project, dan pilih Edit File Project.
  9. Hapus <WindowsPackageType>None</WindowsPackageType>, simpan, dan tutup.
  10. Di menu drop-down Platform Solusi, pilih x64 (bukan Apa Pun CPU).
  11. Konfirmasikan bahwa Anda dapat membuat dan menjalankan.

Setelah mengemas aplikasi WPF, Anda dapat memanggil API yang memerlukan identitas paket. Jadi dalam MainWindow.xaml.cs, edit penanganan aktivitas Anda agar terlihat seperti ini:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var notification = new AppNotificationBuilder()
        .AddArgument("action", "viewConversation")
        .AddArgument("conversationId", "9813")
        .AddText("Andrew sent you a picture")
        .AddText("Check this out, The Enchantments in Washington!")
        .BuildNotification();

    AppNotificationManager.Default.Show(notification);
}

Kompilasi dan jalankan lagi. Klik tombol, dan konfirmasikan bahwa notifikasi toast muncul.

Catatan

Langkah-langkah di bagian ini menunjukkan kepada Anda cara membuat aplikasi paket. Alternatifnya adalah membuat aplikasi paket dengan lokasi eksternal. Untuk pengingat semua istilah ini, lihat Keuntungan dan kerugian pengemasan aplikasi Anda.

Jalankan kode di latar belakang

Untuk aplikasi WPF yang perlu menjalankan kode saat aplikasi tidak berjalan, ada tiga pendekatan tergantung pada kemasan dan beban kerja Anda:

Pendekatan Kemasan diperlukan Paling cocok untuk
Tugas latar belakang SDK Aplikasi Windows Ya (MSIX) Pemicu dikelola sistem yang hemat daya (waktu/sistem)
Penjadwal Tugas No Sinkronisasi berkala, aplikasi tanpa bungkus
.NET Worker Services No Beban kerja tanpa kepala yang berjalan lama, model penyebaran apa pun

Untuk tugas latar belakang SDK Aplikasi Windows, aplikasi WPF Anda mendaftarkan komponen COM menggunakan BackgroundTaskBuilder seperti aplikasi WinUI 3 — peristiwa Application.Startup di WPF berfungsi sama dengan peran yang dimainkan oleh App.OnLaunched di WinUI 3. Lihat Gunakan tugas latar belakang di aplikasi Windows untuk panduan lengkap.

Catatan

SDK Aplikasi Windows tugas latar belakang memerlukan kemasan MSIX. Untuk aplikasi WPF yang tidak dipaketkan, gunakan Task Scheduler atau .NET Worker Services sebagai gantinya.