Bagikan melalui


Migrasi MRT ke MRT Core

Topik ini berisi panduan untuk bermigrasi dari Sistem Manajemen Sumber Daya UWP (juga dikenal sebagai MRT) ke MRT Core SDK Aplikasi Windows.

MRT Core adalah versi MRT yang efisien. Untuk informasi selengkapnya, lihat Mengelola sumber daya dengan MRT Core.

Ringkasan perbedaan API dan/atau fitur

Untuk kemudahan migrasi, API MRT Core sangat mirip dengan API MRT. Untuk dokumentasi referensi API, lihat namespace Layanan Microsoft.Windows.ApplicationModel.Resources.

Catatan

Tidak semua API MRT ada di MRT Core. Tetapi semua API yang diperlukan untuk fungsionalitas dasar MRT disertakan.

Mengubah namespace layanan

Di UWP, API MRT berada di namespace Layanan Windows.ApplicationModel.Resources.Core. Dalam SDK Aplikasi Windows, API MRT Core berada di namespace Microsoft.Windows.ApplicationModel.Resources. Jadi Anda harus mengubah nama namespace layanan tersebut di kode sumber Anda (tambahkan Microsoft. di awal, dan hapus .Core di akhir).

Catatan

Dalam SDK Aplikasi Windows 1.0 Pratinjau 1 dan rilis yang lebih baru, MRT Core API berada di namespace Microsoft.Windows.ApplicationModel.Resources. Dalam rilis yang lebih awal dari itu, mereka berada di namespace Microsoft.ApplicationModel.Resources .

Kelas ResourceManager

Bagian ini berlaku jika Anda menggunakan properti Windows.ApplicationModel.Resources.Core.ResourceManager.Current di aplikasi UWP Anda.

// In a UWP app
using Windows.ApplicationModel.Resources.Core;
...
var currentResourceManager = ResourceManager.Current;
// In a UWP app
#include <winrt/Windows.ApplicationModel.Resources.Core.h>
using namespace winrt::Windows::ApplicationModel::Resources::Core;
...
auto currentResourceManager{ ResourceManager::Current() };

Sebagai gantinya, di aplikasi SDK Aplikasi Windows Anda, buat Microsoft.Windows.ApplicationModel.Resources.ResourceManager baru.

// In a Windows App SDK app
using Microsoft.Windows.ApplicationModel.Resources;
...
var currentResourceManager = new ResourceManager();
// In a Windows App SDK app
#include <winrt/Microsoft.Windows.ApplicationModel.Resources.h>
using namespace winrt::Microsoft::Windows::ApplicationModel::Resources;
...
ResourceManager currentResourceManager;

ResourceContext.GetForCurrentView, dan ResourceContext.GetForViewIndependentUse

Kelas MRT ResourceContext UWP membedakan antara ResourceContext untuk tampilan saat ini, dan satu untuk penggunaan independen tampilan.

Untuk kelas MRT Core ResourceContext SDK Aplikasi Windows, aplikasi Anda perlu menentukan konteks yang benar (nilai kualifikasi sumber daya), dan konsep tampilan saat ini dan penggunaan independen tampilan tidak lagi berlaku.

Nilai kualifikasi sumber daya

Dalam MRT UWP, nilai kualifikasi konteks sumber daya ditentukan untuk aplikasi. Sementara di MRT Core, hanya nilai bahasa yang diisi. Aplikasi Anda perlu menentukan nilai lain untuk dirinya sendiri. Berikut adalah contoh, di mana diasumsikan tampilan XAML Anda berisi elemen bernama layoutRoot.

// In a Windows App SDK app
using Microsoft.Windows.ApplicationModel.Resources;
...
var currentResourceManager = new ResourceManager();
var resourceContext = currentResourceManager.CreateResourceContext();
int scaleFactor = Convert.ToInt32(layoutRoot.XamlRoot.RasterizationScale * 100);
resourceContext.QualifierValues[KnownResourceQualifierName.Scale] = scaleFactor.ToString();
string s = resourceContext.QualifierValues[KnownResourceQualifierName.Scale];
// In a Windows App SDK app
#include <winrt/Microsoft.Windows.ApplicationModel.Resources.h>
using namespace winrt::Microsoft::Windows::ApplicationModel::Resources;
...
ResourceManager currentResourceManager;
auto resourceContext{ currentResourceManager.CreateResourceContext() };
auto scaleFactor{ layoutRoot().XamlRoot().RasterizationScale() * 100 };
resourceContext.QualifierValues().Insert(L"Scale", std::to_wstring((int)scaleFactor));
auto s{ resourceContext.QualifierValues().Lookup(L"Scale") };

Perubahan nilai kualifikasi sumber daya

MRT UWP menyediakan peristiwa ResourceQualifierObservableMap.MapChanged. Dan bagian ini berlaku jika aplikasi UWP Anda menangani peristiwa tersebut untuk mendengarkan perubahan nilai kualifikasi.

MRT Core tidak menyediakan mekanisme pemberitahuan apa pun sekeliling perubahan lingkungan. Jadi aplikasi SDK Aplikasi Windows Anda perlu mendeteksi perubahan tersebut sendiri jika Anda ingin memperbarui sumber daya berdasarkan perubahan lingkungan.

Aplikasi sampel MRT Core

Lihat juga muat sumber daya menggunakan proyek aplikasi sampel MRT Core, yang menunjukkan cara menggunakan permukaan MRT Core API.