0

我从 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,而在我的实际设备上,应用程序根本不加载?

4

2 回答 2

2

把你的断点放进去hubTile_Tap,看看是什么sender。我猜这将是HubTile,而不是TileItem。在这种情况下TileItem可能是HubTile.DataContext

于 2012-08-14T00:13:09.950 回答
0

我只是在写和@JohnGardner 一样的东西,所以我会跳过它。只是要小心发件人。实际上,在某些情况下,它可能是相当的。如果您遇到这种情况,请尝试检查System.Windows.Input.GestureEventArgs e其及其SourceOriginalSource- 它们可能不一定是 HubTile,并且不一定具有有趣的 DataContext,但几乎可以保证它们是VisualorUIElement并且您可以轻松地向上跟踪它们的 VisualParents,以及关闭的视觉父级将是带有 DataContext=TileItem 的 HubTile。这是最坏的情况。首先,试试 John 所说的,你有 95% 的可能性会起作用 :)

于 2012-08-14T00:16:52.267 回答