にコントロールを動的に追加しようとしていItemsControl
ます。コントロールを使用RadHubTile
していますが、これはどのコントロールにも当てはまると思います。マイ XAML
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<telerikPrimitives:RadUniformGrid x:Name="radUniformGrid" NumberOfColumns="3" NumberOfRows="3" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
新しいコントロールの追加は正常に機能し、正しくバインドされます。この問題は、ページから移動して戻ったときに発生します。このエラーが発生します
MS.Internal.WrappedException: Element is already the child of another element. ---> System.InvalidOperationException: Element is already the child of another element.
at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value)
at MS.Internal.XcpImports.Collection_AddDependencyObject[T] (PresentationFrameworkCollection`1 collection, DependencyObject value)
at System.Windows.PresentationFrameworkCollection`1.AddDependencyObject(DependencyObject value)
at System.Windows.Controls.UIElementCollection.AddInternal(UIElement value)
at System.Windows.PresentationFrameworkCollection`1.Add(T value)
at System.Windows.Controls.ItemsControl.AddVisualChild(Int32 index, DependencyObject container, Boolean needPrepareContainer)
at System.Windows.Controls.ItemsControl.AddContainers()
at System.Windows.Controls.ItemsControl.RecreateVisualChildren(IntPtr unmanagedObj)
--- End of inner exception stack trace ---
radHubTile 要素には既に親があるためだと思います。おそらく、ページから移動するときに、visualtree または ItemsControl からそれらを削除する必要がありますか? OnBackKeyPress の背後にあるコードを使用してこれを実行しようとしましたが、これを正確に達成する方法がわかりません。または、それで問題が解決する場合。
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
foreach (var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
//this.itemsControl.Items.Remove(uiElement);
}
}
編集
上記を削除しようとすると、次のエラーが発生しますuiElement
{System.InvalidOperationException: Operation not supported on read-only collection.
助言がありますか?ありがとう。