我为我的应用程序制作了大约100个Hubtiles,我希望他们在点击时读取XML文件,并且用户能够在应用程序外的屏幕上“固定”所需的Hubtile。
每个Hubtile都会读取不同的XML文件,并且必须能够固定以启动。
我知道要启动它的代码,我知道让它读取XML的代码,但是有100个磁贴,这将是许多编码和复制/粘贴行。
这是我的代码,可以从应用程序中弹出一个tile,并固定在xaml上开始:
<toolkit:HubTile Name="Monday" Title="Monday" Source="Days\Weekdays\Monday.png" Margin="15" Tap="day_Tap">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Name="monday" Header="pin to start" Tap="monday_Tap"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</toolkit:HubTile>
CS文件背后的代码,用于制作并检查它是否已存在:
private void monday_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
CreateLiveTile(Monday, "path-to-xml", "monday_Square_0.png");
}
private void CreateLiveTile(HubTile hubtile, string link, string id)
{
StandardTileData LiveTile = new StandardTileData
{
Title = hubtile.Title,
BackBackgroundImage = (hubtile.Source as BitmapImage).UriSource
};
ShellTile Tile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("id=" + id));
{
if (Tile == null)
{
ShellTile.Create(new Uri("/Show.xaml?id=" + id + "&link=" + link, UriKind.Relative), LiveTile);
}
else
{
MessageBox.Show("The tile is already pinned");
}
}
}
使用一个点击事件处理程序是否存在动态方式,或者我需要100个点击事件处理程序用于所有100个图块,每个XML文件需要100个路径,100个事件处理程序用于启动hubtile并编写在xaml的每个hubtile上都有相同的东西?
此外,我尝试并认为它有效,为所有的hubtile制作一个tap事件处理程序,但我看到了hubtile名称的整个路径,而不仅仅是tile名称:
private void Week_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
String a = (((Microsoft.Phone.Controls.HubTile)(sender)).Source as BitmapImage).UriSource.OriginalString;
String b = a.Replace(((Microsoft.Phone.Controls.HubTile)(sender)).Title + "_Square_0.png", "week.xml");
String weekPath = a.Replace(((Microsoft.Phone.Controls.HubTile)(sender)).Title + "_Square_0.png", "");
String weekName = ((Microsoft.Phone.Controls.HubTile)(sender)).Title;
NavigationService.Navigate(new Uri("/Show.xaml?parameter=" + b, UriKind.Relative));
}
答案 0 :(得分:7)
每个控件都有Tag
属性。此属性的类型为object
,已经为您设置 。基本上,你可以把你需要的任何信息放在里面。这对于实现通用操作是非常宝贵的帮助,就像您正在尝试的那样。
所以你可以这样做:
<toolkit:HubTile Name="Monday" Title="Monday" Source="Days\Weekdays\Monday.png" Margin="15" Tap="Tile_Tap" Tag="path-to-xml">
然后在事件处理程序中:
private void Tile_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var pathToXml = (string)((FrameworkElement)sender).Tag;
// Whatever
}