I have the following implementation of the HubTile control from the windows phone toolkit, and everything is working correctly except for implementing a tap event from the selected tile. I am unsure of how to link the tap of a specific tile to an event handler in code behind (which should simply navigate to a new page in my project). What I have so far is as follows:
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:HubTile>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
TileItem.cs
public class TileItem
{
public string ImageUri
{
get;
set;
}
public string Title
{
get;
set;
}
public string Notification
{
get;
set;
}
public bool DisplayNotification
{
get
{
return !string.IsNullOrEmpty(this.Notification);
}
}
public string Message
{
get;
set;
}
public string GroupTag
{
get;
set;
}
//not sure how to implement this?
public string Tap
{
get;
set;
}
}
MainPage.xaml.cs
#region Ctr
public MainPage()
{
InitializeComponent();
CreateHubTiles();
}
#endregion
private void CreateHubTiles()
{
List<TileItem> tileItems = new List<TileItem>()
{
//there will be at least 2 distinct tiles linking to seperate pages
new TileItem() { ImageUri = "/Images/shareStatusImage.jpg", Title = "status", /*Notification = "last shared link uri",*/ Message = "last shared status message", GroupTag = "TileGroup", Tap = "shareStatus_Tap" },
new TileItem() { ImageUri = "/Images/shareLinkImage.jpg", Title = "link", /*Notification = "last shared status message",*/ Message = "last shared link uri", GroupTag = "TileGroup", Tap = "shareLink_Tap" }
};
this.tileList.ItemsSource = tileItems;
}
#region Navigation
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
HubTileService.UnfreezeGroup("TileGroup");
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
HubTileService.FreezeGroup("TileGroup");
}
#endregion
#region Event Handlers
private void hubTile_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
//vibrate
if (Settings.EnableVibration.Value)
{
VibrateController.Default.Start(TimeSpan.FromMilliseconds(40));
}
TileItem tap = sender as TileItem;
string _tap = tap.Tap.ToString(); //NullReferenceException occurs here
switch(_tap)
{
case "shareStatus_Tap":
this.NavigationService.Navigate(new Uri("/Views/ShareStatusPage.xaml", UriKind.Relative));
break;
case "shareLink_Tap":
this.NavigationService.Navigate(new Uri("/Views/ShareLinkPage.xaml", UriKind.Relative));
break;
}
}
#endregion
So I have tried to create a tap property for each tile, and then when a tile is tapped, the event handler decides which tile was the tapped one and navigates to a new page accordingly. For some reason the Tap
property is null though? The project loads in the emulator but a tile tap does not work, and on my actual device the app doesnt load at all?