2017-08-25 17 views

Répondre

0

Je trouve cette solution:

m_pBatteryStateImage est l'image, définie en XAML.

Les URIs pour les images peuvent être trouvées dans le fichier généré automatiquement PROJECTNAMEGenerated.rc2

void MainPage::SetBatteryState(BatteryStateFlags batteryState) 
{ 

    BSTR src = GetImageSourceUri(batteryState); 
    SetImage(src); 
} 

void MainPage::SetImage(BSTR src) 
{ 
    IXRApplication* application; 
    App::GetApplication(&application); 
    //Check which uri is currently used: 
    BSTR originalSrc; 
    IXRImageSource* iSource; 
    m_pBatteryStateImage->GetSource(&iSource); 
    IXRBitmapImagePtr bmpSrc = (IXRBitmapImagePtr)iSource; 
    bmpSrc->GetUriSource(&originalSrc); 
    //Set new image if source uri is different 
    if (wcscmp(originalSrc,src)!=0) 
    { 
     IXRBitmapImagePtr bitmapImage; 
     application->CreateObject(IID_IXRBitmapImage, &bitmapImage); 
     bitmapImage->SetUriSource(src); 
     m_pBatteryStateImage->SetSource(bitmapImage); 
    } 
} 

BSTR MainPage::GetImageSourceUri(BatteryStateFlags batteryState) 
{ 
    BSTR src; 
    //see PROJECTNAMEGenerated.rc2 - the numbers will change if images are added (they are alphabetically sorted). 
    //TODO make it robust against changes 
    if(batteryState & BatteryChargerError) 
     src = TEXT("#105"); 
    else if(batteryState & BatteryHigh) 
     src = TEXT("#106"); 
    else if(batteryState & BatteryLow) 
     src = TEXT("#109"); 
    else 
     //Show error if nothing else matches (Should not happen) 
     src = TEXT("#105"); 
    return src; 
}