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

UWP应用使用非Assets文件夹图片作为SecondaryTile源时崩溃

SecondaryTile加载自定义目录图片崩溃的解决方案

我来帮你搞定这个UWP磁贴加载自定义目录图片崩溃的问题~

首先得明白为啥用Assets目录没问题,换其他目录就崩:SecondaryTile对磁贴图片的Uri有严格要求,必须是应用能合法访问的路径,而且格式不能错。

核心原因分析

Assets目录里的文件默认会被设置为「内容」生成操作,而且用ms-appx:///协议能直接访问到。但换成其他目录时,要么是Uri格式不对,要么是文件没被正确包含到应用包,或者应用没有访问权限,导致系统找不到图片直接崩溃。

具体解决方案

1. 分情况使用正确的Uri协议

  • 如果图片在应用包内的非Assets目录(比如你自己建的CustomTiles文件夹):
    确保文件的「生成操作」是「内容」(右键文件→属性→生成操作,选「内容」),然后用ms-appx:///开头的Uri,比如:

    Uri square150x150Logo = new Uri("ms-appx:///CustomTiles/square150x150Tile.png");
    

    这样系统就能从应用包中找到这个文件了。

  • 如果图片在应用本地存储(比如LocalFolder):
    要用ms-appdata:///local/开头的Uri,或者通过StorageFile获取路径,示例代码:

    // 假设图片存在LocalFolder的CustomTiles子目录下
    var localFolder = ApplicationData.Current.LocalFolder;
    var tileFolder = await localFolder.GetFolderAsync("CustomTiles");
    var tileFile = await tileFolder.GetFileAsync("square150x150Tile.png");
    
    // 两种方式构造Uri都可以
    Uri square150x150Logo = new Uri(tileFile.Path);
    // 或者直接写:new Uri("ms-appdata:///local/CustomTiles/square150x150Tile.png")
    

2. 绝对避坑:别用系统绝对路径

UWP应用有沙箱限制,直接用C:\xxx这种绝对路径肯定会崩,必须用ms-appx:///(包内文件)或ms-appdata:///(本地存储文件)协议。

3. 加异常捕获排查问题

给磁贴创建代码套个try-catch,能快速定位具体错误(比如文件找不到、权限不足):

try
{
    SecondaryTile customTile = new SecondaryTile(
        "MyUniqueTileId",
        "自定义磁贴标题",
        "磁贴激活参数",
        square150x150Logo,
        TileSize.Square150x150);
    
    customTile.Wide310x150Logo = wide310x150Logo;
    customTile.Square310x310Logo = square310x310Logo;
    customTile.Square30x30Logo = square30x30Logo;
    
    await customTile.RequestCreateAsync();
}
catch (Exception ex)
{
    // 输出错误信息到调试窗口
    System.Diagnostics.Debug.WriteLine($"磁贴创建失败:{ex.Message}");
}

按上面的步骤调整后,应该就能正常加载自定义目录的图片创建磁贴啦~

内容的提问来源于stack exchange,提问作者D.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:14