在父项目中创建用户控件类的新实例不起作用

时间:2012-03-04 21:22:09

标签: c# windows-phone-7

我这个问题已经有一段时间了,需要帮助!我有一个父项目,它正在实现在父项目之外定义的用户控件。名为FullWebBrowser(webbrowser控件)的用户控件被加载到我的MainPage.xaml中,该工作正常,但是当我尝试在父项目的其他页面中创建此用户控件的新实例时出现问题(来自NavigatedTo) MainPage.xaml中)。 为了快速参考,我的代码如下:

MainPage.xaml中

<Grid x:Name="ContentPanel" Grid.Row="0">
        <my:FullWebBrowser Name="TheBrowser" InitialUri="http://www.google.com" />
    </Grid>

FullWebBrowser和MainPage.xaml一样正常工作,MainPage.xaml控制导航以及现在名为'TheBrowser'的FullWebBrowser控件的名称,以便在MainPage.xaml.cs中使用。 由于某种原因,我不允许在从MainPage.xaml导航到的其他页面中调用TheBrowser,例如SharePage.xaml。为什么会这样,有没有办法访问名为TheBrowser的FullWebBrowser以便在这些其他页面中使用?

为了解决这个问题,我试图在我的SharePage代码中创建一个新的FullBrowserControl实例,并将其命名为“browser”。需要注意的是,SharePage的目的是模仿默认的Windows Phone Internet Explorer共享页面菜单项选项,以便我可以允许用户通过电子邮件,文本或社交网络共享当前网页URL。

SharePage.xaml.cs

public partial class SharePage : PhoneApplicationPage
{
    //new instance of FullWebBrowser
    FullWebBrowser browser = new FullWebBrowser();        

    public SharePage()
    {
        InitializeComponent();
    }

    private void SocialNetworks_Click(object sender, RoutedEventArgs e)
    {
        ShareLinkTask shareLinkTask = new ShareLinkTask();

        Uri shareUrl = new Uri(browser.currentUrl());

        shareLinkTask.Title = "Shared Link!";
        shareLinkTask.LinkUri = shareUrl;
        shareLinkTask.Message = "Check out this link!";

        shareLinkTask.Show();
    }

    private void Messaging_Click(object sender, RoutedEventArgs e)
    {
        SmsComposeTask smsComposeTask = new SmsComposeTask();

        Uri shareUrl = new Uri(browser.currentUrl());

        smsComposeTask.To = "";
        smsComposeTask.Body = "Check out this link! " + shareUrl;

        smsComposeTask.Show();
    }

    private void Email_Click(object sender, RoutedEventArgs e)
    {
        EmailComposeTask emailComposeTask = new EmailComposeTask();

        Uri shareUrl = new Uri(browser.currentUrl());

        emailComposeTask.Subject = "Link share from Quest internet browser";
        emailComposeTask.Body = "Check out this link! " + shareUrl;
        emailComposeTask.To = "";
        emailComposeTask.Cc = "";
        emailComposeTask.Bcc = "";

        emailComposeTask.Show();
    }
}

似乎在SharePage.xaml.cs中创建FullWebBrowser的新实例无法正常工作,因为当我从每个SharePage.xaml.cs单击事件中获取代码并将其放在MainPage.xaml.cs中(并更改) FullBrowserName为'TheBrowser',因为它在MainPage.xaml中命名,而不是在SharePage.xaml.cs中命名的'browser')一切正常。我是不是正确创建了usercontrol的新实例,还是我应该做一些其他让我正确执行SharePage操作的内容?

1 个答案:

答案 0 :(得分:1)

导航到单独的页面时,第一页不再可用。

如果您希望在页面之间传递详细信息,则应在导航过程中(在查询字符串中)执行此操作。或者,您应该将它们存储在一个全局可访问的位置,例如App对象,一个静态对象或另一个已经实例化的对象,以便可用于所有必需的页面。


由于SharePage具有新的浏览器实例,因此无法访问其他页面上的实例中设置的属性。就像这样:

var browserA = new WebBrowser { InitialUri = "http://stackoverflow.com/" };
var browserB = new WebBrowser();

如果您尝试查询InitialUri的{​​{1}},则不会是browserB的值。

根据您的情况:

a)用户在MainPage上的WebBrowser中浏览 b)用户点击MainPage上的“共享”按钮 c)App导航到SharePage以选择共享方法 d)用户选择共享方法并共享链接。

您需要在步骤browserA中执行的操作是在进行导航时传递“currentUrl”。类似的东西:

b

MainPage.xaml.cs

然后在NavigtionService.Navigate(new Uri("SharePage.xaml?curUrl=" + HttpUtility.UrlEncode(browser.CurrentlUrl())));

SharePage.xaml.cs

然后,您可以在string urlToShare; protected override void OnNavigatedTo(....) { NavigationContext.QueryString.TryGetValue("curUrl", out urlToShare); } urlToShare方法中使用SocialNetworks_Click

是的,还有其他方法可以做到,但这可能是最简单的,基于我对你要做的事情的理解。