在父项目中创建用户控件类的新实例不起作用
本文关键字:新实例 实例 不起作用 项目 创建 控件 用户 | 更新日期: 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();
如果您尝试查询browserB
的InitialUri
,它将不是来自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_Click
和SocialNetworks_Click
方法中使用urlToShare
。
是的,还有其他方法可以做到这一点,但根据我对你想要做的事情的理解,这可能是最简单的