0

我希望我的应用程序只有一个视图。

我需要这个视图是一个外部 URL。

我尝试按照 microsoft 上的示例使用 webBrowser Task。

我穿上我的承包商:

WebBrowserTask webBrowserTask = new WebBrowserTask();

webBrowserTask.Uri = new Uri("http://msdn.microsoft.com", UriKind.Absolute);

webBrowserTask.Show();

但是,当我按下后退按钮而不是在应用程序外部导航时,我正在导航到第一页是空的......

我的代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

//added this for push
using Microsoft.Phone.Notification;
using System.Text;

//added this to open an external URL using the WebBrowser Task
using Microsoft.Phone.Tasks;


namespace WindowsPush
{

    public partial class MainPage : PhoneApplicationPage
    {


        // Constructor
        public MainPage()
        {
            /// Holds the push channel that is created or found.
            HttpNotificationChannel pushChannel;

            // The name of our push channel.
            string channelName = "ToastSampleChannel";

            InitializeComponent();

            // Try to find the push channel.
            pushChannel = HttpNotificationChannel.Find(channelName);

            // If the channel was not found, then create a new connection to the push service.
            if (pushChannel == null)
            {
                pushChannel = new HttpNotificationChannel(channelName);

                // Register for all the events before attempting to open the channel.
                pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
                pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

                // Register for this notification only if you need to receive the notifications while your application is running.
                //pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

                pushChannel.Open();

                // Bind this new channel for toast events.
                pushChannel.BindToShellToast();

            }
            else
            {
                // The channel was already open, so just register for all the events.
                pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
                pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

                // Register for this notification only if you need to receive the notifications while your application is running.
                //pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

                // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
                System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
                // MessageBox.Show(String.Format("Channel Uri is {0}", pushChannel.ChannelUri.ToString()));

            }

            object uniqueID;
            if (Microsoft.Phone.Info.DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out uniqueID) == true)
            {
                byte[] bID = (byte[])uniqueID;
                string deviceID = Convert.ToBase64String(bID);   // There you go
                System.Diagnostics.Debug.WriteLine("Device Unique Id is: {0}", deviceID);
            }



            //opening the external URL using webBrowserTask
            WebBrowserTask webBrowserTask = new WebBrowserTask();

            webBrowserTask.Uri = new Uri("http://msdn.microsoft.com", UriKind.Absolute);

            webBrowserTask.Show();


        }


        void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
        {
            Dispatcher.BeginInvoke(() =>
            {
                // Display the new URI for testing purposes.   Normally, the URI would be passed back to your web service at this point.
                System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());
                MessageBox.Show(String.Format("Channel Uri is {0}", e.ChannelUri.ToString()));
            });
        }


        void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
        {
            // Error handling logic for your particular application would be here.
            Dispatcher.BeginInvoke(() =>
                MessageBox.Show(String.Format("A push notification {0} error occurred.  {1} ({2}) {3}", e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData)));
        }


    }
}

我需要的只是在我的应用程序的第一个也是唯一一个视图上加载一个外部 URL。

我怎么能这样做?

4

2 回答 2

1

您正在寻找WebBrowser 控件。将其添加到主应用程序页面并像处理WebBrowserTask.

于 2013-03-21T16:23:05.207 回答
0

如果你打算使用,WebBrowserTask那么你可以通过抛出一个未处理的异常来关闭应用程序返回它:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.Back)
    {
        throw new Exception("deliberately doing this to force the app to close");
    }
}

如果/当您在 Windows Phone 8 中执行此操作时,您可以调用Application.Current.Terminate();而不是抛出异常。

不过,请务必在提交之前检查仅启动外部网站的应用程序的市场认证要求。

于 2013-03-21T17:40:31.590 回答