1

にコントロールを動的に追加しようとしてい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.

助言がありますか?ありがとう。

4

2 に答える 2

0

最初にアイテムをクリアするだけですItems.Clear()

http://msdn.microsoft.com/de-de/library/system.windows.controls.itemcollection.clear.aspx

于 2013-05-24T14:05:21.647 に答える
0

UI 要素のコレクション ( RadHubTile) を にバインドしているようですItemsControl。これを行うのではなく、コレクションItemsControl内の XAML に直接タイルを追加するか、タイルItemsのデータ (非 UI) オブジェクトのコレクションをバインドしてからItemsSource、 を使用してコントロール自体ItemTemplateを宣言する必要があります。新しいインスタンスが作成さRadHubTileれるたびに、新しいインスタンスとしてあなたを。ItemsControl

于 2013-05-24T14:00:40.490 に答える