Vb.net 返回页面并在代码隐藏中添加控件时出错

Vb.net 返回页面并在代码隐藏中添加控件时出错,vb.net,windows-phone-7,xaml,Vb.net,Windows Phone 7,Xaml,在我的Windows Phone应用程序(VB/XAML)中,我在返回页面时在代码隐藏中创建XAML控件时遇到问题 基本上,我的页面在崩溃时试图做的是基于datacontext创建一些控件。首先正确创建控件,然后当页面离开并返回时,控件将不再创建(无论是否使用相同的数据对象填充页面)。这是导致崩溃的原因: ItemStack1.Children.Add(AnswerPanel1) 我刚刚得到一个通用的“System.InvalidOperationException”错误 我已经检查过,到目前

在我的Windows Phone应用程序(VB/XAML)中,我在返回页面时在代码隐藏中创建XAML控件时遇到问题

基本上,我的页面在崩溃时试图做的是基于datacontext创建一些控件。首先正确创建控件,然后当页面离开并返回时,控件将不再创建(无论是否使用相同的数据对象填充页面)。这是导致崩溃的原因:

ItemStack1.Children.Add(AnswerPanel1)
我刚刚得到一个通用的“System.InvalidOperationException”错误

我已经检查过,到目前为止,一切都如我所期望的那样——无论页面如何导航,数据对象都已正确填充。我还试图通过在尝试添加之前删除AnswerPanel1项来缩小问题的范围。我怀疑该应用程序正在“记住”上次打开时的页面,这导致我“翻倍”了一些东西

如果我在这一行使用“Try…Catch”,那么该控件将从页面中丢失(这对我来说意味着该控件不存在,我认为这是第二次创建它失败的原因)

我导航到具有以下内容的页面:

NavigationService.Navigate("/CasebookSelectCasePage.xaml", sItem)
…它使用一个小的“helper”类来传递sItem对象,但在该类中它可以正常导航,如下所示:

 service.Navigate(New Uri(page, UriKind.Relative))

我想我遗漏了一些基本的或明显的东西……当向后导航到首页时,我是否需要将页面从内存中“刷新”?

何时尝试准确地创建控件?是在OnNavigatedTo()中还是在page_Loaded()中创建它们?与您尝试创建对象的方式不同。

疑难解答中的更多信息:似乎只有在使用以前具有的相同对象重新填充页面时才会发生错误-例如,第一次发送object1时,它工作正常…发送object2时,它工作正常…但是如果我尝试发送object1或object2第二次(返回上一页,然后再次点击该项目以启动新页面)我收到错误。在设备上,错误消息的第一部分是“元素已经是另一个元素的子元素”.我想我发现了问题,但没有找到答案…问题出在我传递到新页面的对象上。我想我需要在传递之前创建一个新副本(我可以通过对传递的对象进行硬编码来实现,但我不知道如何创建一个正确类型的新对象来传递,而不是像以前一样传递相同的副本。例如,点击的对象是“Object1”,而不是传递Object1,我想传递一个新的Object1(它继承自Object,但我不知道在运行时是否需要Object1或Object2等,但它们都是从Object继承的)。那么,你在A页。然后你转到B页。然后你导航回A页,它崩溃了?为什么你要重新填充控件?你尝试过没有它吗?应该缓存A页。或者在将新项目添加到ItemStack之前,先尝试清除它。当我返回B页时失败:A页-单击某个项目,项目将发送到B页,然后重试一切正常。返回到A页,再次单击同一项,B页无法根据传递的对象中的数据创建usercontrols。如果我发送对象的新副本而不是A页中的同一副本,问题就会消失,但如果不进行硬编码,我不知道如何执行此操作。我需要传递object_subtype 1类型的对象。如何创建与单击的对象类型和子类型(继承)相同的对象的新副本?AnswerPanel已添加到stackpanel。您是否尝试在从页面B导航时调用ItemStack1.Children.Clear()(清除堆栈并使AnswerPanel没有父对象)或者作为导航到页面B的第一步,再次执行相同的操作?我的控件在发送到页面的对象中创建(即在页面存在之前),然后我将它们添加到OnNavigatedTo()中的页面布局(Grid1.Children.add方法)。在我的解决方法中,我创建控件并将其放置在OnNavigatedTo()中它的功能和预期的一样。缺点是,当我想向我的应用程序添加新的控件类型时,我必须在页面中而不是在对象本身中硬编码逻辑。我有我想要的功能,所以从这个意义上说它可以工作。但我重新设计了应用程序的工作方式,因为我无法让它以我尝试的方式正确工作G