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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示