You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP中使用Uri构造BitmapImage给Image.Source赋值失效问题咨询

UWP文件激活场景下图片加载失败解决方案

问题根因

  • UWP沙箱权限限制:仅应用安装目录(ms-appx://)、应用数据目录(ms-appdata://)下的文件支持直接通过路径构造Uri加载BitmapImage,其余位置的文件哪怕拿到了本地路径,也没有直接路径访问权限。
  • 你测试应用内置资源加载失败的直接原因是代码存在语法错误:new Uri("ms-appx:///09.png, UriKind.RelativeOrAbsolute)中资源路径末尾缺少闭合双引号,正确写法为new Uri("ms-appx:///09.png", UriKind.RelativeOrAbsolute),同时需确认图片文件的「生成操作」属性设置为内容,「复制到输出目录」设置为如果较新则复制。

可行解决方案

你对文件激活场景的权限逻辑存在误解:通过FileActivatedEventArgs拿到的StorageFile对象本身已经被系统授予访问权限,无需弹出文件选择器,可直接调用OpenAsync打开流加载图片,这是该场景的标准处理方案,适配代码如下:

protected override async void OnNavigatedTo(NavigationEventArgs EvArgs)
{
    base.OnNavigatedTo(EvArgs);
    var Args = EvArgs.Parameter as Windows.ApplicationModel.Activation.IActivatedEventArgs;
    if (Args != null && Args.Kind == Windows.ApplicationModel.Activation.ActivationKind.File)
    {
        var FArgs = Args as Windows.ApplicationModel.Activation.FileActivatedEventArgs;
        if (FArgs?.Files?.Count > 0)
        {
            var targetFile = FArgs.Files[0];
            using var fileStream = await targetFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
            var bitmap = new BitmapImage();
            await bitmap.SetSourceAsync(fileStream);
            var IMG = new Image() { Source = bitmap };
            FV.Items.Add(IMG);
            PathBlock.Text = $"{targetFile.Name} - Image Viewer";
        }
    }
    else
    {
        PathBlock.Text = "Image Viewer";
    }
}

注意事项

UWP沙箱不支持任意本地路径的Uri直读,除了上述两个应用专属目录外,所有外部文件必须通过StorageFile流的方式加载,没有绕过该限制的合法方案。

内容的提问来源于stack exchange,提问作者Ivirius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:06:04