ResourceContext Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Encapsula todos los factores (ResourceQualifiers) que podrían afectar a la selección de recursos.
public ref class ResourceContext sealed
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ResourceContext final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class ResourceContext final
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ResourceContext
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class ResourceContext
function ResourceContext()
Public NotInheritable Class ResourceContext
- Herencia
- Atributos
Requisitos de Windows
Familia de dispositivos |
Windows 10 (se introdujo en la versión 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)
|
Ejemplos
Este ejemplo se basa en el escenario 12 de los recursos de la aplicación y el ejemplo de localización. Consulte el ejemplo para obtener la solución completa.
private async void Scenario12Button_Show_Click(object sender, RoutedEventArgs e)
{
// Two coding patterns will be used:
// 1. Get a ResourceContext on the UI thread using GetForCurrentView and pass
// to the non-UI thread
// 2. Get a ResourceContext on the non-UI thread using GetForViewIndependentUse
//
// Two analogous patterns could be used for ResourceLoader instead of ResourceContext.
// pattern 1: get a ResourceContext for the UI thread
ResourceContext defaultContextForUiThread = ResourceContext.GetForCurrentView();
// pattern 2: we'll create a view-independent context in the non-UI worker thread
// We need some things in order to display results in the UI (doing that
// for purposes of this sample, to show that work was actually done in the
// worker thread):
List<string> uiDependentResourceList = new List<string>();
List<string> uiIndependentResourceList = new List<string>();
// use a worker thread for the heavy lifting so the UI isn't blocked
await Windows.System.Threading.ThreadPool.RunAsync(
(source) =>
{
ResourceMap stringResourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
// pattern 1: the defaultContextForUiThread variable was created above and is visible here
// pattern 2: get a view-independent ResourceContext
ResourceContext defaultViewIndependentResourceContext = ResourceContext.GetForViewIndependentUse();
// NOTE: The ResourceContext obtained using GetForViewIndependentUse() has no scale qualifier
// value set. If this ResourceContext is used in its default state to retrieve a resource, that
// will work provided that the resource does not have any scale-qualified variants. But if the
// resource has any scale-qualified variants, then that will fail at runtime.
//
// A scale qualifier value on this ResourceContext can be set programmatically. If that is done,
// then the ResourceContext can be used to retrieve a resource that has scale-qualified variants.
// But if the scale qualifier is reset (e.g., using the ResourceContext.Reset() method), then
// it will return to the default state with no scale qualifier value set, and cannot be used
// to retrieve any resource that has scale-qualified variants.
// simulate processing a number of items
// just using a single string resource: that's sufficient to demonstrate
for (var i = 0; i < 4; i++)
{
// pattern 1: use the ResourceContext from the UI thread
string listItem1 = stringResourceMap.GetValue("string1", defaultContextForUiThread).ValueAsString;
uiDependentResourceList.Add(listItem1);
// pattern 2: use the view-independent ResourceContext
string listItem2 = stringResourceMap.GetValue("string1", defaultViewIndependentResourceContext).ValueAsString;
uiIndependentResourceList.Add(listItem2);
}
});
// Display the results in one go. (A more finessed design might add results
// in the UI asynchronously, but that goes beyond what this sample is
// demonstrating.)
ViewDependentResourcesList.ItemsSource = uiDependentResourceList;
ViewIndependentResourcesList.ItemsSource = uiIndependentResourceList;
}
void Scenario12::Scenario12Button_Show_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
// Two coding patterns will be used:
// 1. Get a ResourceContext on the UI thread using GetForCurrentView and pass
// to the non-UI thread
// 2. Get a ResourceContext on the non-UI thread using GetForViewIndependentUse
//
// Two analogous patterns could be used for ResourceLoader instead of ResourceContext.
// pattern 1: get a ResourceContext for the UI thread
ResourceContext^ defaultContextForUiThread = ResourceContext::GetForCurrentView();
// pattern 2: we'll create a view-independent context in the non-UI worker thread
// We need some things in order to display results in the UI (doing that
// for purposes of this sample, to show that work was actually done in the
// worker thread): a pair of vectors to capture data, and a pair of variable
// references to the controls where the results will be displayed (needed to
// pass to the .then lambda).
Platform::Collections::Vector<Platform::String^>^ uiDependentResourceItems = ref new Platform::Collections::Vector<Platform::String^>();
Platform::Collections::Vector<Platform::String^>^ uiIndependentResourceItems = ref new Platform::Collections::Vector<Platform::String^>();
ItemsControl^ viewDependentListControl = ViewDependentResourcesList;
ItemsControl^ viewIndependentListControl = ViewIndependentResourcesList;
// use a worker thread for the heavy lifting so the UI isn't blocked
concurrency::create_task(
Windows::System::Threading::ThreadPool::RunAsync(
ref new Windows::System::Threading::WorkItemHandler(
[defaultContextForUiThread, uiDependentResourceItems, uiIndependentResourceItems](Windows::Foundation::IAsyncAction^ /*action*/)
{
// This is happening asynchronously on a background worker thread,
// not on the UI thread.
ResourceMap^ stringResourceMap = ResourceManager::Current->MainResourceMap->GetSubtree("Resources");
// coding pattern 1: the defaultContextForUiThread variable was created above and has been captured to use here
// coding pattern 2: get a view-independent ResourceContext
ResourceContext^ defaultViewIndependentResourceContext = ResourceContext::GetForViewIndependentUse();
// NOTE: The ResourceContext obtained using GetForViewIndependentUse() has no scale qualifier
// value set. If this ResourceContext is used in its default state to retrieve a resource, that
// will work provided that the resource does not have any scale-qualified variants. But if the
// resource has any scale-qualified variants, then that will fail at runtime.
//
// A scale qualifier value on this ResourceContext can be set programmatically. If that is done,
// then the ResourceContext can be used to retrieve a resource that has scale-qualified variants.
// But if the scale qualifier is reset (e.g., using the ResourceContext::Reset() method), then
// it will return to the default state with no scale qualifier value set, and cannot be used
// to retrieve any resource that has scale-qualified variants.
// simulate processing a number of items
// just using a single string resource: that's sufficient to demonstrate
for (auto i = 0; i < 4; i++)
{
// pattern 1: use the ResourceContext from the UI thread
Platform::String^ item1 = stringResourceMap->GetValue("string1", defaultContextForUiThread)->ValueAsString;
uiDependentResourceItems->Append(item1);
// pattern 2: use the view-independent ResourceContext
Platform::String^ item2 = stringResourceMap->GetValue("string1", defaultViewIndependentResourceContext)->ValueAsString;
uiIndependentResourceItems->Append(item2);
}
}))
).then([uiDependentResourceItems, uiIndependentResourceItems, viewDependentListControl, viewIndependentListControl]
{
// After the async work is complete, this will execute on the UI thread.
// Display the results in one go. (A more finessed design might add results
// in the UI asynchronously, but that goes beyond what this sample is
// demonstrating.)
viewDependentListControl->ItemsSource = uiDependentResourceItems;
viewIndependentListControl->ItemsSource = uiIndependentResourceItems;
});
}
Comentarios
Los recursos pueden ser sensibles a la escala y diferentes vistas que pertenecen a una aplicación pueden mostrarse simultáneamente en diferentes dispositivos de visualización, lo que podría usar diferentes escalas. Por ese motivo, un ResourceContext se asocia generalmente a una vista específica y se debe obtener mediante GetForCurrentView. (Se puede obtener un ResourceContext independiente de la vista mediante GetForViewIndependentUse, pero tenga en cuenta que se producirá un error en la funcionalidad dependiente de la escala si se invoca en un ResourceContext que no está asociado a una vista).
No cree una instancia de ResourceContext mediante el constructor, ya que está en desuso y está sujeta a la eliminación en una versión futura.
Excepto cuando se indique lo contrario, se puede llamar a métodos de esta clase en cualquier subproceso.
Historial de versiones
Versión de Windows | Versión del SDK | Valor agregado |
---|---|---|
1903 | 18362 | GetForUIContext |
Constructores
ResourceContext() |
Crea un objeto ResourceContext clonado. Nota El constructor ResourceContext puede modificarse o no estar disponible para las versiones después de Windows 8.1. En su lugar, use GetForCurrentView y Clone. |
Propiedades
Languages |
Obtiene o establece el calificador de idioma para este contexto. |
QualifierValues |
Obtiene una asignación grabable y observable de todos los calificadores admitidos, indizado por nombre. |
Métodos
Clone() |
Crea un clon de este ResourceContext, con calificadores idénticos. |
CreateMatchingContext(IIterable<ResourceQualifier>) |
Crea un nuevo ResourceContext que coincide con un conjunto proporcionado de calificadores. Nota CreateMatchingContext puede modificarse o no estar disponible para las versiones después de Windows 8.1. En su lugar, use ResourceContext.GetForCurrentView.OverrideToMatch. |
GetForCurrentView() |
Obtiene un resourceContext predeterminado asociado a la vista actual de la aplicación que se está ejecutando actualmente. |
GetForUIContext(UIContext) |
Obtiene un resourceContext predeterminado asociado al uiContext especificado para la aplicación que se está ejecutando actualmente. |
GetForViewIndependentUse() |
Obtiene un resourceContext predeterminado no asociado a ninguna vista. |
OverrideToMatch(IIterable<ResourceQualifier>) |
Invalida los valores de calificador proporcionados por este contexto para que coincidan con una lista especificada de ResourceQualifiers resuelta. Normalmente, los ResourceQualifierresueltos están asociados a un recurso que se ha buscado anteriormente. |
Reset() |
Restablece los valores invalidados para todos los calificadores de la instancia de ResourceContext determinada. |
Reset(IIterable<String>) |
Restablece los valores invalidados para los calificadores especificados en la instancia de ResourceContext especificada. |
ResetGlobalQualifierValues() |
Quita cualquier invalidación de calificador de contextos predeterminados de todas las vistas de la aplicación. |
ResetGlobalQualifierValues(IIterable<String>) |
Quita invalidaciones de calificador para los calificadores especificados de contextos predeterminados de todas las vistas de la aplicación. |
SetGlobalQualifierValue(String, String) |
Aplica una invalidación de valor calificador único a contextos predeterminados de todas las vistas de la aplicación actual. |
SetGlobalQualifierValue(String, String, ResourceQualifierPersistence) |
Aplica una invalidación de valor calificador único a contextos predeterminados de todas las vistas de la aplicación actual y especifica la persistencia de la invalidación. |