Как переключить изображение в "XAML для Windows Embedded (Compact 2013)"

У меня есть проект для Windows CE, который использует XAML для Windows Embedded (Compact 2013) (также известный как "Silverlight для Windows Embedded") для графического интерфейса.

Я определил изображение в xaml, и теперь я хочу переключить это изображение в коде C++ за частью.

Как мне это сделать?

1 ответ

Решение

Я нашел это решение:

m_pBatteryStateImageэто изображение, определенное в Xaml.

URI для изображений можно найти в автоматически сгенерированном файле 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;
}
Другие вопросы по тегам