Freigeben über


ResourceContext Klasse

Definition

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
Object Platform::Object IInspectable ResourceContext
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.

Gilt für:

Weitere Informationen