网格背景图像源绑定中断从后台 Windows Phone 8 返回的应用

本文关键字:Phone Windows 返回 应用 后台 图像 背景 绑定 中断 网格 | 更新日期: 2023-09-27 17:56:17

我正在按照本指南从Microsoft加载分辨率相关的图像作为我的应用程序的背景。

例如,在我的"关于"页面中,我有此代码

<Grid>
    <Grid.Background>
        <ImageBrush ImageSource="{Binding BestResolutionImage, Source={StaticResource MultiResImageChooser}}"/>
    </Grid.Background>
    <!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Margin="12,0,12,0">
    <phone:Pivot Title="ABOUT"  x:Name="helPagePiv">
        <!--Pivot item one-->
        <phone:PivotItem Header="about us">
            <controls:About />
        </phone:PivotItem>
        <!--Pivot item two-->
        <phone:PivotItem Header="change log">
            <controls:ChangeLog />
        </phone:PivotItem>
    </phone:Pivot>
</Grid>
</Grid>

它工作正常,但是当我单击启动电子邮件应用程序的链接或将我的应用程序置于后台的浏览器控件时,会出现问题。当我使用后退硬件按钮返回我的应用程序时,背景图像不会重新加载,从而导致背景为空。

我想我必须在某个地方使用INotifyPropertyChanged。无论如何,如何确保返回我的应用程序时刷新背景图像?

更新我尝试更改绑定Mode但这并没有带来任何不同。

更新 2Windows Phone 8.1 中似乎不存在此问题。因此,如果我更新到 8.1,现在很好。

网格背景图像源绑定中断从后台 Windows Phone 8 返回的应用

您必须在MultiResImageChooser类中实现INotifyPropertyChanged。您必须在属性的 setter 中引发 BestResolutionImage 属性的属性更改事件。

public class MultiResImageChooser : INotifyPropertyChanged
{
    public event NotifyPropertyChangedArgs PropertyChanged;
    ...
    public ImageSource BestResolutionImage
    {
        get
        {
            return _bestResolutionImage;
        }
        set
        {
            if(value != _bestResolutionImage)
            {
                _bestResolutionImage = value;
                OnPropertyChanged("BestResolutionImage");
            }
        }
    }
    protected virtual void OnPropertyChanged(string property)
    {
        if(null != PropertyChanged)
        {
            PropertyChanged(this, new NotifyPropertyChangedEventArgs(property));
        }
    }
}