MRT から MRT Core への移行
このトピックでは、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 アプリ 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 サーフェスの使用方法が示されています。
関連項目
Windows developer