【问题标题】:WP81 binding an image fails, setting local fallback image loses original bindingWP81 绑定图片失败,设置本地后备图片丢失原始绑定
【发布时间】:2016-02-09 01:45:04
【问题描述】:

我正在将 Windows Phone 8.1(RT 不是 silverlight)上 ImageBrush 的 ImageSource 绑定到远程 uri,并且当图像无法显示默认图像时有一个处理程序:

<ImageBrush Stretch="UniformToFill" ImageSource="{Binding MyBackgroundUrl}" ImageFailed="ImageBrush_ImageFailed"/>

在后面的代码中,我更新了图像源属性以将其设置为本地图像:

    protected void ImageBrush_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
            var img = sender as ImageBrush;
            if (img == null) return;

            var uri = new BitmapImage(new Uri("ms-appx:///Assets/App/MyDefaultBackground.jpg"));
            img.ImageSource = uri;
    }

这很好用,但是这样做会丢失原始绑定,因此如果我用不同的绑定值重新加载同一个屏幕,它不会重新绑定。

考虑到我正在做的事情,这是有道理的,所以在这种情况下,我的问题是我做错了什么以及如何正确设置后备图像,同时允许图像在重新加载时重新绑定?

【问题讨论】:

    标签: windows-phone-8.1 winrt-xaml imagebrush


    【解决方案1】:

    你当然是。您正在覆盖绑定。您必须像这样设置属性:

    void ImageBrush_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
        var img = sender as ImageBrush;
        if (img == null) return;
    
        var uri = new BitmapImage(new Uri("ms-appx:///Assets/App/MyDefaultBackground.jpg"));
        var vm = img.DataContext as MainPageViewModel;
        vm.MyBackgroundUrl = uri;
    }
    

    如果你不喜欢这样,那么你可以有两个图像。一个在另一个之上,并根据失败设置其可见性。类似这样的伪代码:

    var img = new Image();
    // you would not new it up here, you would ref your control.
    img.ImageOpened += (s, e) => OverlayImage.Visibility = Visibility.Collapsed;
    img.ImageFailed += (s, e) => OverlayImage.Visibility = Visibility.Collapsed;
    

    对你有意义吗?

    我刚刚注意到您在谈论图像画笔而不是图像。逻辑应该是相同的,但它可能需要成为底层而不是覆盖。此外,因为它是一个底层,您可能不需要切换它的可见性,因为成功的图像画笔会遮挡底层。在你的情况下可能会更容易。

    祝你好运!

    【讨论】:

    • 啊,当然,我知道问题出在哪里,起初 DataContext 躲避了我,但是当我尝试它时,ImageBrush 上没有这样的属性 DataContext 能够更新它。我的 ViewModel 是一个字符串,所以我不能将位图图像或 Uri 传递给它。我确实想尝试将 Uri 更改为 mx-appx 之一,但是控件上又没有这样的 DataContext 属性
    • 你的评论我看不出来。我回答你的问题了吗?当我重新阅读您的问题时,我似乎已经回答了它。你告诉我。
    • 您最初是这样做的,但是当我尝试它时,我发现 ImageBrush 没有公开 DataContext 属性,因此我无法更新 datacontext 以将 uri 更新为失败事件中的图像...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多