MRT에서 MRT 코어로 마이그레이션

이 항목에는 UWP의 리소스 관리 시스템(MRT라고도 함)에서 Windows 앱 SDK의 MRT Core로 마이그레이션하기 위한 지침이 포함되어 있습니다.

MRT Core는 MRT의 간소화된 버전입니다. 자세한 내용은 MRT Core로 리소스 관리를 참조하세요.

API 및/또는 기능 차이점 요약

마이그레이션을 쉽게 하기 위해 MRT Core API는 MRT API와 매우 유사합니다. API 참조 문서는 Microsoft.Windows.ApplicationModel.Resources 네임스페이스를 참조하세요.

참고

모든 MRT API가 MRT Core에 존재하는 것은 아닙니다. 그러나 MRT의 기본 기능에 필요한 모든 API가 포함되어 있습니다.

네임스페이스 변경

UWP에서 MRT API는 Windows.ApplicationModel.Resources.Core 네임스페이스에 있습니다. Windows 앱 SDK에서 MRT Core API는 Microsoft.Windows.ApplicationModel.Resources 네임스페이스에 있습니다. 따라서 소스 코드에서 해당 네임스페이스 이름을 변경해야 합니다(시작 부분에 Microsoft.를 추가하고 끝에 .Core를 제거).

참고

Windows App SDK 1.0 미리 보기 1 이상 릴리스에서 MRT Core API는 Microsoft.Windows.ApplicationModel.Resources 네임스페이스에 있습니다. 그 이전 릴리스에서는 Microsoft.ApplicationModel.Resources 네임스페이스에 있습니다.

ResourceManager 클래스

이 섹션은 UWP 앱에서 Windows.ApplicationModel.Resources.Core.ResourceManager.Current 속성을 사용하는 경우에 적용됩니다.

// 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 앱 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

UWP의 MRT ResourceContext 클래스는 현재 보기의 ResourceContext와 보기 독립적 사용을 구분합니다.

Windows 앱 SDK의 MRT Core ResourceContext 클래스의 경우 앱은 올바른 컨텍스트(리소스 한정자 값)를 결정해야 하며 현재 보기 및 보기 독립적 사용의 개념은 더 이상 적용되지 않습니다.

  • 따라서 ResourceContext.GetForCurrentView API 또는 ResourceContext.GetForViewIndependentUse API를 사용하는 경우 ResourceManager.CreateResourceContext를 대신 사용합니다.

리소스 한정자 값

UWP의 MRT에서 리소스 컨텍스트 한정자 값은 앱에 대해 결정됩니다. 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") };

리소스 한정자 값 변경

UWP의 MRT는 ResourceQualifierObservableMap.MapChanged 이벤트를 제공합니다. 그리고 이 섹션은 UWP 앱이 한정자 값 변경을 수신 대기하기 위해 해당 이벤트를 처리하는 경우에 적용됩니다.

MRT Core는 환경 변경에 대한 알림 메커니즘을 제공하지 않습니다. 따라서 환경 변경을 기반으로 리소스를 업데이트하려는 경우 Windows 앱 SDK 앱은 이러한 변경을 자체적으로 검색해야 합니다.

MRT Core 샘플 앱

MRT Core API 노출 영역을 사용하는 방법을 보여 주는 MRT Core를 사용하여 리소스 로드 샘플 앱 프로젝트도 참조하세요.