Миграция MRT в MRT Core

В этом разделе содержатся рекомендации по переходу с системы управления ресурсами UWP (также известной как MRT) на Windows App SDK MRT Core.

MRT Core — это упрощенная версия MRT. Дополнительные сведения см. в статье Управление ресурсами с помощью MRT Core.

Сводка по различиям в API и (или) функциях

Для простоты миграции API-интерфейсы MRT Core очень похожи на API MRT. Справочную документацию по API см . в разделе Пространство имен Microsoft.Windows.ApplicationModel.Resources.

Примечание

Не все API MRT существуют в MRT Core. Но все API, необходимые для основных функций MRT, включены.

Изменение пространства имен

В UWP API MRT находятся в пространстве имен Windows.ApplicationModel.Resources.Core . В Windows App SDK ОСНОВНЫЕ API MRT находятся в пространстве имен Microsoft.Windows.ApplicationModel.Resources. Поэтому необходимо изменить имя пространства имен в исходном коде (добавить Microsoft. в начале и удалить в .Core конце).

Примечание

В Windows App SDK 1.0 предварительной версии 1 и более поздних версиях API-интерфейсы MRT Core находятся в пространстве имен Microsoft.Windows.ApplicationModel.Resources. В более ранних выпусках они находятся в пространстве имен Microsoft.ApplicationModel.Resources .

Класс ResourceManager

Этот раздел применяется, если вы используете свойство Windows.ApplicationModel.Resources.Core.ResourceManager.Current в приложении UWP.

// 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() };

Вместо этого в приложении Windows App SDK создайте microsoft.Windows.ApplicationModel.Resources.ResourceManager.

// 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 и ResourceContext.GetForViewIndependentUse

Класс ResourceContext UWP MRT различает ResourceContext для текущего представления и для независимого от представления.

Для класса RESOURCEContext Windows App SDK MRT Core приложение должно определить правильный контекст (значения квалификатора ресурсов), и понятия текущего представления и независимого от представления использования больше не применяются.

  • Поэтому, если вы используете API ResourceContext.GetForCurrentView или API ResourceContext.GetForViewIndependentUse , используйте вместо него ResourceManager.CreateResourceContext .

Значения квалификатора ресурсов

В МРТ UWP значения квалификатора контекста ресурса определяются для приложения. В MRT Core заполняется только значение языка. Приложение должно определить другие значения для себя. Ниже приведен пример, в котором предполагается, что представление XAML содержит элемент с именем 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") };

Изменение значения квалификатора ресурсов

MrT UWP предоставляет событие ResourceQualifierObservableMap.MapChanged . Этот раздел применяется, если приложение UWP обрабатывает это событие, чтобы прослушивать изменения значений квалификатора.

MRT Core не предоставляет никаких уведомлений об изменениях среды. Поэтому приложение Windows App SDK должно самостоятельно обнаруживать такие изменения, если вы хотите обновлять ресурсы на основе изменений среды.

Пример приложения MRT Core

См. также пример проекта приложения Загрузка ресурсов с помощью MRT Core , в котором показано, как использовать поверхность API MRT Core.