I would like to be able to pin a hubtile in my application to the start screen, so that the start screen tile has the same animation effects as my hubtile. WHen the user clicks on the pinned hubtile, he or she will be navigated to the correct page. I have followed this example http://igrali.com/2011/09/27/how-to-pin-a-hubtile-to-start-screen/ , but it does not work for me?
MainPage.xaml
<ListBox Grid.Row="0" x:Name="tileList" toolkit:TiltEffect.IsTiltEnabled="True">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<toolkit:HubTile Title="{Binding Title}" Margin="3"
Notification="{Binding Notification}"
DisplayNotification="{Binding DisplayNotification}"
Message="{Binding Message}"
GroupTag="{Binding GroupTag}"
Source="{Binding ImageUri}"
Tap="hubTile_Tap">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu x:Name="menu">
<toolkit:MenuItem Header="pin to start" Tap="MenuItem_Tap"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</toolkit:HubTile>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
MainPage.xaml.cs
public MainPage()
{
InitializeComponent();
CreateHubTiles();
}
private void CreateHubTiles()
{
List<TileItem> tileItems = new List<TileItem>()
{
new TileItem() { ImageUri = "/Images/shareStatusImage.jpg", Title = "status", /*Notification = "last shared link uri",*/ Message = Settings.statusMessage.Value, GroupTag = "TileGroup" },
new TileItem() { ImageUri = "/Images/shareLinkImage.jpg", Title = "link", /*Notification = "last shared status message",*/ Message = "last shared link uri", GroupTag = "TileGroup" },
};
this.tileList.ItemsSource = tileItems;
}
private void MenuItem_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
HubTile tap = sender as HubTile;
CreateLiveTile(tap);
}
private void CreateLiveTile(HubTile hubtile)
{
//First create a new StandardTileData object from the hubtile to be pinned
//NullReferenceException occurs here!!
StandardTileData LiveTile = new StandardTileData
{
BackBackgroundImage = ((System.Windows.Media.Imaging.BitmapImage)hubtile.Source).UriSource,
Title = hubtile.Title,
BackTitle = hubtile.Title,
BackContent = hubtile.Message
};
//Check to see if the tile already exists
//If not, create it
//If yes, display messagebox
ShellTile Tile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("DefaultTitle=" + LiveTile.Title));
if (Tile == null)
{
try
{
ShellTile.Create(new Uri("/MainPage.xaml?DefaultTitle=" + LiveTile.Title, UriKind.Relative), LiveTile);
}
catch (Exception)
{
MessageBox.Show("This tile could not be pinned", "Warning", MessageBoxButton.OK);
}
}
else
{
MessageBox.Show("This tile has already been pinned", "Notice", MessageBoxButton.OK);
}
}
I am stuck on this and how it could be changed so that it will work!? Also, does this actually place a hubtile on the start screen, or just use the hubtile data to create a secondary tile?
Live tiles for “normal” apps (not first party apps) are limited in what they can do. You can only provide a front/back image, front/back text a back content, and a count. This is all that we have access to.
UPDATE Adding more info based on error being received
You can accomplish this by getting your TileItem