私は自分のアプリケーション用に約 100 個の Hubtile を作成しました。それらがタップされたときに XML ファイルを読み取り、ユーザーがアプリ外の画面で目的の Hubtile を「ピン留めして開始」できるようにしたいと考えています。
すべての Hubtile は異なる XML ファイルを読み取り、開始するにはピン留めできる必要があります。
ピン留めして開始するコードと、XML を読み取らせるコードは知っていますが、100 個のタイルがあり、コーディングとコピー/貼り付けの行数が多くなります。
これは、アプリケーションからタイルをポップし、固定して 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");
}
}
}
1 つのタップ イベント ハンドラーで動的に発生する方法はありますか、それとも 100 個のタイルすべてに 100 個のタップ イベント ハンドラー、各 XML ファイルに 100 個のパス、ピンがハブタイルを開始して同じことを書き込むために 100 個のイベント ハンドラーが必要ですか? xamlのすべてのハブタイル?
さらに、すべてのハブタイルに対して 1 つのタップ イベント ハンドラーを作成しようとしましたが、機能していると思いますが、タイル名だけでなく、ハブタイルの名前へのパス全体が表示されます。
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));
}