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

本文关键字:新实例 实例 不起作用 项目 创建 控件 用户 | 更新日期: 2023-09-27 18:26:33

我遇到这个问题已经有一段时间了,需要帮助!我有一个父项目,它正在实现在父项目之外定义的用户控件。名为FullWebBrowser的用户控件(一个Web浏览器控件)已加载到我的MainPage.xaml中,该控件工作正常,但当我试图在父项目的其他页面(从MainPage.xml导航到)中创建此用户控件的新实例时,就会出现问题。为了快速参考,我的代码如下:

主页.xaml

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

FullWebBrowser和MainPage.xaml都能正常工作,MainPage.xam控制导航和FullWebBrowser控件的其他内容,现在名为"TheBrowser",可在MainPage.xaml.cs中使用。现在,由于某种原因,我不允许在从MainPage.xaml导航到的其他页面(如SharePage.xaml)中调用TheBrowser。为什么会这样,有没有一种方法可以访问名为TheBrowser的FullWebBrowser以在这些其他页面中使用?

为了解决这个问题,我试图在我的SharePage代码后面创建一个FullBrowserControl的新实例,并将其命名为"浏览器"。需要注意的是,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.xamm.cs中时(并将FullBrowserName更改为"TheBrowser",因为它在MainPage.xsaml中命名,而不是在SharePage.xsml/cs中命名的"browser"),一切都正常工作。我是不是没有正确创建用户控件的新实例,还是应该做一些其他事情来正确执行SharePage操作?

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

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

如果您有希望在页面之间传递的详细信息,则应将其作为导航过程的一部分(在查询字符串中)。或者,您应该将它们存储在全局可访问的位置,例如应用程序对象、静态对象或其他已实例化的对象,以便所有必要的页面都可以使用。


因为SharePage有一个新的浏览器实例,所以在另一个页面的实例中设置的属性将不可访问。它是这样的:

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

如果您尝试查询browserBInitialUri,它将不是来自browserA的值。

基于您的场景:

a) 用户在MainPage上的WebBrowser中浏览
b) 用户点击主页上的"共享"按钮
c) 应用程序导航到SharePage以选择共享方法
d) 用户选择共享的方法,并共享链接。

在步骤b中,您需要做的是在进行导航时传递"currentUrl"。类似于:

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);
}

然后可以在SocialNetworks_ClickSocialNetworks_Click方法中使用urlToShare

是的,还有其他方法可以做到这一点,但根据我对你想要做的事情的理解,这可能是最简单的