Поделиться через


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

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

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

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

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

Примечание.

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

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

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

Примечание.

В пакете SDK для приложений Windows 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() };

Вместо этого в приложении пакета SDK для приложений Для Windows создайте новый 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

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

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

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

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

В MRT 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 не предоставляет никаких механизмов уведомлений вокруг изменений среды. Поэтому приложение пакета SDK для приложений Windows должно самостоятельно обнаруживать такие изменения, если вы хотите обновить ресурсы на основе изменений среды.

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

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