【问题标题】:How to override a method in another page in WP8?如何在 WP8 中覆盖另一个页面中的方法?
【发布时间】:2014-06-17 12:58:50
【问题描述】:

我正在开发一个涉及通过 ProximityDevice 类读取 NFC 标签的应用程序。这个想法是,当标签在 main_page 上成功读取时,它将导航到 second_page,所有标签内容的处理都将在此处完成。当它到达 second_page 时,应用程序必须无法再读取任何标签,除非它回到 main_page。

问题是当应用导航到second_page时,它仍然会读取标签并执行我在main_page上声明的方法。似乎方法是在 second_page 上继承的。

有没有办法: (1) 完全禁用读感应器,必要时重新启用;或者 (2) 覆盖从main_page继承的方法?

我尝试过: (1)在导航到下一页之前使用 stopSubscribingForMessage ,但它仍然读取后续标签; (2) 在 second_page 上声明读取标签的新方法 - 这些新方法与 main_page 中的方法一起执行。

这是我的代码:

(主页面)

public MainPage()
{
InitializeComponent();
device = ProximityDevice.GetDefault();
        if (device != null)
        {
            device.DeviceArrived += ProximityDeviceArrived;
        }
        else
        {
            MessageBox.Show("Failed to initialize proximity device.");
        }

}

public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}

public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
//reads tag content
sender.StopSubscribingForMessage(message.SubscriptionId);
    NavigationService.Navigate(new Uri("/Result.xaml?tagContent=" + tagContent, UriKind.Relative));
}   

(第二页)

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
        base.OnNavigatedTo(e);
        string tagContent = NavigationContext.QueryString["tagContent"];
        //process tag content
    device = ProximityDevice.GetDefault();
        if (device != null)
        {
            device.DeviceArrived += ProximityDeviceArrived;
        }
        else
        {
            MessageBox.Show("Failed to initialize proximity device.");
        }
}

public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
        device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}

public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
        Debug.WriteLine("You tapped your tag again. I will do nothing.");
}

我真的希望你能帮帮我!

【问题讨论】:

    标签: c# visual-studio-2012 windows-phone-8 nfc overriding


    【解决方案1】:

    第二页没有继承这些方法,只是您没有正确取消订阅该消息。

    您是否尝试使用SubscribeFromMessage() 的返回值而不是message.SubscriptionId 来调用StopSubscribingForMessage()

    这是 API 文档的建议。

    【讨论】:

    • 谢谢!我怎么能忽略这一点。
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 2010-10-14
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多