Winrt Phone 8.1 页面上的应用程序共享任务功能只能使用一次

Winrt Phone 8.1 Application share task functionality on Page works only once

我的应用程序中有一个共享简单文本的页面,但无法正常工作。

生成此功能的步骤。

  1. 进入页面点击分享显示可以分享的应用

  2. 点击后退按钮 => 再次点击分享按钮。

  3. 这次不会打开共享屏幕。

在下面粘贴我的代码:

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        _dataTransferManager.DataRequested -= OnDataRequested;
        this.navigationHelper.OnNavigatedFrom(e);
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        _dataTransferManager = DataTransferManager.GetForCurrentView();
        _dataTransferManager.DataRequested += OnDataRequested;
        this.navigationHelper.OnNavigatedTo(e);
    }

    private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
    {
        e.Request.Data.Properties.Title =  obj.Title;
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(obj.Description);
        string html = "";
        foreach (HtmlNode item in doc.DocumentNode.Descendants())
        {
            if (item.Name == "body")
            {
                html = item.InnerHtml;
            }
        }
        e.Request.Data.Properties.Description = html;
        e.Request.Data.SetText(html);
    }

    private void AppBarButton_Click_1(object sender, RoutedEventArgs e)
    {
        //DataTransferManager.ShowShareUI();
        if (CMSService.IsConnectedToInternet())
        {
            DataTransferManager.ShowShareUI();
        }
        else
        {
            ContentText.Text = App.GetResource("NoInternetAlert");
            AlertMessage.ShowAsync();
        }
    }

并且在调试共享时一直有效。

我怀疑问题是因为您在 OnNavigatedFrom 事件中退订了 _dataTransferManager.DataRequested -= OnDataRequested;。这在调试时会很好地工作,因此不会引发此事件 - 当调试 PLM 被禁用且 Suspending/Resuming events won't be raised

当运行应用程序正常时,暂停会调用OnNavigatedFrom,但是,因此不会对_dataTransferManager.DataRequested += OnDataRequested;进行订阅。

在这种情况下,您可能可以使用 Suspending/Resuming(或其他)事件来处理 DataTransferManager.