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

SecondaryTile.DisplayName创建时可更新 后续实例化更新失效问题咨询

问题原因
  • 直接调用 new SecondaryTile(id) 构造得到的实例仅填充了TileId属性,不会自动加载该磁贴在系统中存储的完整元数据(包括原有Arguments、磁贴Logo、显示配置等必填属性)
  • SecondaryTile.UpdateAsync()执行时要求实例包含磁贴的全部必填元数据,缺失情况下系统会默认跳过DisplayName属性的变更校验,所以更新不生效
  • 磁贴视觉效果更新走的是TileUpdateManager相关API,仅依赖TileId即可定位目标磁贴,无需完整SecondaryTile实例,所以不受该问题影响
解决方案

方案1:先拉取系统存储的完整磁贴实例(更稳妥,无需提前存储磁贴其他属性)

async Task UpdateTileDisplayName(string tileId, string newDisplayName)
{
    // 拉取当前应用所有已固定的SecondaryTile
    var allTiles = await SecondaryTile.FindAllAsync();
    // 匹配对应Id的磁贴,此时拿到的实例包含所有完整元数据
    var targetTile = allTiles.FirstOrDefault(t => t.TileId == tileId);
    if (targetTile == null) return;
    
    targetTile.DisplayName = newDisplayName;
    await targetTile.UpdateAsync();
}

方案2:手动填充所有必填属性后更新(适合本地已存储磁贴其他必填属性的场景)

async Task UpdateTileDisplayName(string tileId, string newDisplayName, string arguments, Uri square150x150Logo)
{
    // 构造实例后手动补充所有创建磁贴时的必填属性
    var targetTile = new SecondaryTile(tileId);
    targetTile.Arguments = arguments; // 和创建磁贴时的Arguments保持一致即可
    targetTile.DisplayName = newDisplayName;
    targetTile.VisualElements.Square150x150Logo = square150x150Logo; // 和创建磁贴时的Logo保持一致
    // 其他创建时设置过的属性都要重新赋值,比如显示大小、是否显示名称等
    targetTile.VisualElements.ShowNameOnSquare150x150Logo = true;
    
    await targetTile.UpdateAsync();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:36:04