Winrt Phone 8.1 页面上的应用程序共享任务功能只能使用一次
Winrt Phone 8.1 Application share task functionality on Page works only once
我的应用程序中有一个共享简单文本的页面,但无法正常工作。
生成此功能的步骤。
进入页面点击分享显示可以分享的应用
点击后退按钮 => 再次点击分享按钮。
这次不会打开共享屏幕。
在下面粘贴我的代码:
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.
我的应用程序中有一个共享简单文本的页面,但无法正常工作。
生成此功能的步骤。
进入页面点击分享显示可以分享的应用
点击后退按钮 => 再次点击分享按钮。
这次不会打开共享屏幕。
在下面粘贴我的代码:
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.