我从 windows phone 工具包中实现了 HubTile 控件的以下实现,除了从所选磁贴实现点击事件外,一切正常。我不确定如何将特定磁贴的点击链接到代码后面的 Tap 事件处理程序(它应该只是导航到我项目中的新页面)。到目前为止,我所拥有的如下:
主页.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)
{
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
在模拟器中,MainPage 加载活动的 hubtiles 工作,但点击事件导致 NullReferenceException,而在我的实际设备上,应用程序根本不加载?