起初,这个例外对我来说并没有多大意义。为什么我不能多次复制这个对象?但那不是重点:
我使用List。每当我导航到一个网站时,它应该这样做:
(App.Current as App).recent.ForEach(x => container.Children.Add(x));
(container =另一个StackPanel)
第一次,它的工作原理。之后,我得到了问题标题中显示的异常。我已经尝试使用列表框,但我刚收到一个ArgumentException。我认为这些例外具有相同的来源,但我不知道我做错了什么。请帮忙
感谢
答案 0 :(得分:10)
错误非常明确:WPF / SL控件一次只能属于1个父控件。
因此,当您离开页面时,您必须从父级中删除控件,或者您必须在此ForEach中创建(可能克隆)新控件。
答案 1 :(得分:1)
当您导航到某个页面时,旧实例不会立即删除,因此当您将控件添加到新页面时,如果它未被销毁,它们仍可能在旧页面中使用,从而导致异常。
尝试覆盖离开页面时调用的OnNavigatedFrom(NavigationEventArgs e)
和OnNavigatingFrom(NavigatingCancelEventArgs e)
方法,以便清空StackPanel。
例如,你可以这样做:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
container.Children.Clear();
}
答案 2 :(得分:0)
从页面导航时,您必须删除容器的子项。但是,如果导航是由于暂停导致。为避免儿童在导航暂停时清除,最好覆盖OnNavigatingFrom
而不是OnNavigatedFrom
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
container.Children.Clear();
base.OnNavigatingFrom(e);
}