如何从ShellTile NavigationUri提取QueryString值

本文关键字:提取 QueryString NavigationUri ShellTile | 更新日期: 2023-09-27 18:15:34

当将ShellTile固定到开始屏幕时,我正在创建QueryString,如下所示

var title = DateTime.Now.ToString();
string tileParameter = "uri=Title_" + title;
ShellTile Tile = CheckIfTileExist(tileParameter);  // Check if Tile's title has been used             
if (Tile == null)
{
    ...
    ShellTile.Create(new Uri("/MainPage.xaml?" + "uri=Title_" + title, UriKind.Relative), LiveTile);  //pass the tile parameter as the QueryString
}

和我的CheckIfTileExists方法

private ShellTile CheckIfTileExist(string tileUri)
{
    ShellTile shellTile = ShellTile.ActiveTiles.FirstOrDefault(tile => tile.NavigationUri.ToString().Contains(tileUri));
    return shellTile;
}

这一切都工作正常。我的问题是,在更新瓷砖的Background时,我需要检查是否已经固定了特定的瓷砖。我可能有一个以上的ShellTile,所以我需要更新所有的背景相应。在下面的代码中,我试图用foreach语句来做到这一点,但是由于CheckIfTileExists方法只返回FirstOrDefault,我只更新了固定的第一个tile,即使我的foreach语句遍历每个tile。

string tileParameter = "uri=Title_";
foreach (var _tile in ShellTile.ActiveTiles)
{                    
    ShellTile Tile = CheckIfTileExist(tileParameter);  // Check if Tile's title has been used             
    if (Tile != null)
    {
        ... update Background color
    }
}

我如何修复我的循环,使它可以通过每个瓷砖,固定和更新?我的想法是提取QueryString值,即在tile创建时生成的title字符串值,并在更新时将其用于CheckIfTileExists方法中的tileParameter。这是怎么做到的呢?

如何从ShellTile NavigationUri提取QueryString值

您可以使用Where而不是FirstOrDefault—这应该返回所有匹配项:

string tileParameter = "uri=Title_";
foreach (var _tile in ShellTile.ActiveTiles
    .Where(tile => tile.NavigationUri.ToString().Contains(tileParameter))
{                    
    ... update Background color
}