Migración de MRT a MRT Core
Este tema contiene instrucciones para migrar desde el Sistema de administración de recursos de UWP (también conocido como MRT) a MRT Core del SDK de Aplicaciones para Windows.
MRT Core es una versión simplificada de MRT. Para obtener más información, consulte Administración de recursos con MRT Core.
Resumen de las API y/o diferencias en las características
Para facilitar la migración, las API de MRT Core son muy similares a las API de MRT. Para obtener documentación de referencia de API, consulte el espacio de nombres Microsoft.Windows.ApplicationModel.Resources.
Nota:
No todas las API de MRT existen en MRT Core. Pero se incluyen todas las API necesarias para la funcionalidad básica de MRT.
Cambio del espacio de nombres
En UWP, las API de MRT se encuentran en el espacio de nombres Windows.ApplicationModel.Resources.Core. En el SDK de Aplicaciones para Windows, las API de MRT Core se encuentran en el espacio de nombres Microsoft.Windows.ApplicationModel.Resources. Por lo tanto, deberá cambiar ese nombre de espacio de nombres en el código fuente (agregue Microsoft.
al principio y quite al .Core
final).
Nota:
En SDK de Aplicaciones para Windows versión preliminar 1.0 y versiones posteriores, las API de MRT Core se encuentran en el espacio de nombres Microsoft.Windows.ApplicationModel.Resources. En versiones anteriores a eso, se encuentran en el espacio de nombres Microsoft.ApplicationModel.Resources .
ResourceManager (clase)
Esta sección se aplica si usas la propiedad Windows.ApplicationModel.Resources.Core.ResourceManager.Current en tu aplicación para 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() };
En su lugar, en la aplicación de SDK de Aplicaciones para Windows, cree un nuevo 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 y ResourceContext.GetForViewIndependentUse
La clase MRT ResourceContext de UWP distingue entre resourceContext para la vista actual y otra para el uso independiente de la vista.
Para la clase ResourceContext de MRT Core de la SDK de Aplicaciones para Windows, la aplicación debe determinar el contexto correcto (valores de calificador de recursos) y los conceptos de uso actual e independiente de la vista ya no se aplican.
- Por lo tanto, si usa la API ResourceContext.GetForCurrentView o la API ResourceContext.GetForViewIndependentUse , use ResourceManager.CreateResourceContext en su lugar.
Valores de calificador de recursos
En MRT de UWP, los valores de calificador de contexto de recursos se determinan para la aplicación. Mientras se encuentra en MRT Core, solo se rellena el valor de idioma. La aplicación debe determinar otros valores para sí mismos. Este es un ejemplo, donde se supone que la vista XAML contiene un elemento denominado 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") };
Cambio del valor del calificador de recursos
MRT de UWP proporciona el evento ResourceQualifierObservableMap.MapChanged. Y esta sección se aplica si la aplicación para UWP controla ese evento para escuchar los cambios de valor de calificador.
MRT Core no proporciona ningún mecanismo de notificación en torno a los cambios en el entorno. Por lo tanto, la aplicación de SDK de Aplicaciones para Windows debe detectar estos cambios por sí mismos si desea actualizar los recursos en función de los cambios del entorno.
Una aplicación de ejemplo de MRT Core
Consulte también el proyecto carga de recursos mediante la aplicación de ejemplo mrT Core , que muestra cómo usar la superficie de la API de MRT Core.