ResourceContext Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Kapselt alle Faktoren (ResourceQualifiers), die sich auf die Ressourcenauswahl auswirken können.
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
- Vererbung
- Attribute
Windows-Anforderungen
Gerätefamilie |
Windows 10 (eingeführt in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)
|
Beispiele
Dieses Beispiel basiert auf Szenario 12 des Anwendungsressourcen- und Lokalisierungsbeispiels. Sehen Sie sich das Beispiel für die vollständige Lösung an.
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;
});
}
Hinweise
Ressourcen können für skalierungsempfindlich sein, und verschiedene Ansichten, die einer App gehören, können gleichzeitig auf verschiedenen Anzeigegeräten angezeigt werden, die möglicherweise unterschiedliche Skalierungen verwenden. Aus diesem Grund ist ein ResourceContext im Allgemeinen einer bestimmten Ansicht zugeordnet und sollte mithilfe von GetForCurrentView abgerufen werden. (Eine ansichtsunabhängige ResourceContext kann mit GetForViewIndependentUse abgerufen werden. Beachten Sie jedoch, dass skalierungsabhängige Funktionen fehlschlagen, wenn sie für einen ResourceContext aufgerufen werden, der keiner Sicht zugeordnet ist.)
Erstellen Sie keine instance von ResourceContext mithilfe des Konstruktors, da er veraltet ist und in einer zukünftigen Version entfernt werden kann.
Sofern nicht anders angegeben, können Methoden dieser Klasse für jeden Thread aufgerufen werden.
Versionsverlauf
Windows-Version | SDK-Version | Wertschöpfung |
---|---|---|
1903 | 18362 | GetForUIContext |
Konstruktoren
ResourceContext() |
Erstellt ein geklontes ResourceContext-Objekt . Hinweis Der ResourceContext-Konstruktor kann für Releases nach Windows 8.1 geändert oder nicht mehr verfügbar sein. Verwenden Sie stattdessen GetForCurrentView und Clone. |
Eigenschaften
Languages |
Ruft den Sprachqualifizierer für diesen Kontext ab oder legt diesen fest. |
QualifierValues |
Ruft eine beschreibbare, beobachtbare Karte aller unterstützten Qualifizierer ab, die nach Name indiziert ist. |
Methoden
Clone() |
Erstellt einen Klon dieses ResourceContext mit identischen Qualifizierern. |
CreateMatchingContext(IIterable<ResourceQualifier>) |
Erstellt einen neuen ResourceContext , der einem angegebenen Satz von Qualifizierern entspricht. Hinweis CreateMatchingContext kann für Releases nach Windows 8.1 geändert oder nicht mehr verfügbar sein. Verwenden Sie stattdessen ResourceContext.GetForCurrentView.OverrideToMatch. |
GetForCurrentView() |
Ruft einen ResourceContext-Standard ab, der der aktuellen Ansicht für die aktuell ausgeführte Anwendung zugeordnet ist. |
GetForUIContext(UIContext) |
Ruft einen ResourceContext-Standard ab, der dem angegebenen UIContext für die derzeit ausgeführte Anwendung zugeordnet ist. |
GetForViewIndependentUse() |
Ruft einen ResourceContext-Standard ab, der keiner Ansicht zugeordnet ist. |
OverrideToMatch(IIterable<ResourceQualifier>) |
Überschreibt die von diesem Kontext bereitgestellten Qualifiziererwerte, um einer angegebenen Liste der aufgelösten ResourceQualifiers zu entsprechen. In der Regel sind die aufgelösten ResourceQualifiers einer Ressource zugeordnet, die zuvor gesucht wurde. |
Reset() |
Setzt die überschriebenen Werte für alle Qualifizierer auf dem angegebenen ResourceContext-instance zurück. |
Reset(IIterable<String>) |
Setzt die überschriebenen Werte für die angegebenen Qualifizierer für die angegebene ResourceContext-instance zurück. |
ResetGlobalQualifierValues() |
Entfernt alle Qualifiziererüberschreibungen aus den Standardkontexten aller Ansichten in der App. |
ResetGlobalQualifierValues(IIterable<String>) |
Entfernt Qualifiziererüberschreibungen für die angegebenen Qualifizierer aus den Standardkontexten aller Ansichten in der App. |
SetGlobalQualifierValue(String, String) |
Wendet einen einzelnen Qualifiziererwert auf Standardkontexte aller Ansichten für die aktuelle App an. |
SetGlobalQualifierValue(String, String, ResourceQualifierPersistence) |
Wendet einen einzelnen Qualifiziererwert auf Standardkontexte aller Ansichten für die aktuelle App an und gibt die Persistenz der Überschreibung an. |