如何从ShellTile NavigationUri中提取QueryString值

时间:2014-07-30 16:24:46

标签: c# windows-phone-8 live-tile

在将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语句遍历每个区块。

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值,即在创建磁贴时生成的title字符串值,并在更新时将其用于tileParameter方法中的CheckIfTileExists。怎么能实现呢?

1 个答案:

答案 0 :(得分:0)

您可以使用Where代替FirstOrDefault - 这应该返回所有匹配项:

string tileParameter = "uri=Title_";

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