账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    WPF Image 控件绑定时报 无法从流中读取 的错误
    96
    0

    Image 控件绑定时报 无法从流中读取 的错误

    发现是图片有问题,参考网上使用 HttpWebRequest 的检测方法,结合发现问题图片的 PropertyItems 为空(不确定能不能作为判断依据)。

    个人示例:

    // 检测图片有效性;
    foreach (医院列表信息 info in res.data)
    {
        if (string.IsNullOrEmpty(info.hospitalPicture))
        {
            continue;
        }
     
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(info.hospitalPicture);
        WebResponse response = request.GetResponse();
        Image img = Image.FromStream(response.GetResponseStream());
     
        if (img.PropertyItems.Length == 0)
        {
            Logger.Net.Debug($"[选择医院]该医院({info.hospitalName})图片无法解析,将使用默认图");
            ShowAlert(false, "图片解析出错", $"{info.hospitalName} 的图片无法解析,将使用默认图,请联系相关人员换图");
            info.hospitalPicture = "";
        }
    }
     
    var buttons = res.data.Select(x => new HospitalButtonInfo()
    {
        Name = x.hospitalName,
        HospitalId = x.hospitalId,
        Order = x.hospitalId == FrameworkConst.HospitalId ? 1 : 2,
        IsEnabled = true,
        ImageSource = string.IsNullOrEmpty(x.hospitalPicture) ? ResourceEngine.GetImageResource("虚拟医院_House") : new BitmapImage(new Uri(x.hospitalPicture, UriKind.Absolute))
    }).ToList();
     
    Data = buttons;
    


    另外,出错应该是构造 BitmapImage 后就产生的,而不是控件绑定数据时产生的,因为把 foreach 那段放在构建 buttons 后面还是会出错,这也说明构造 BitmapImage 有延迟?就是说即使之后给 ImageSource 重新赋值,之前的 BitmapImage 构建还是会运行。

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 牛逼哄哄超犀利 普通会员 1楼

      这个错误通常表示在WPF的Image控件上,你尝试通过绑定某个事件或访问某个属性,但是无法从流中读取数据。这可能是因为你尝试访问的属性或事件是只读的,或者你尝试访问的流内容不是你想要的数据类型。

      例如,如果你有一个只读的自定义属性MyProperty,并且你想通过绑定一个事件来改变它的值,但你尝试访问MyProperty的值,你可能会收到这个错误。

      为了避免这个问题,你需要确保你尝试访问的属性或事件是可读的,并且你正在尝试访问的流内容与你的意图相匹配。如果你不确定如何检查,你可以尝试在WPF中添加一个条件语句来检查你的尝试访问的属性或事件是否符合你的预期。

      如果你仍然无法解决问题,你可能需要更深入地查看你的代码,以确定你的问题所在。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部