Указанный элемент уже является логическим дочерним элементом другого элемента. - PullRequest
3 голосов
/ 08 ноября 2011

Этот вопрос относится к следующей теме. Prism RegionAdapter - удаление и добавление вида

Мое сообщение в этой теме было удалено моим администратором, сказав, что на него ответили, и мне нужно начать новую тему. Пожалуйста, дайте мне знать, если кто-то из вас решил эту проблему.

Мой удаленный пост был ... Как вам удалось избавиться от «Указанный элемент уже является логическим потомком другого элемента. Сначала отключите его». ошибка с закрытием события. Я попробовал то же самое, закрывая, удаляю закрепляемый контент из области документов. Но это не помогает мне продолжать получать эту ошибку. Как только я удаляю представление, а затем пытаюсь добавить его снова так же, как вы добавляете, я получаю эту ошибку.

Пожалуйста, помогите мне, я не уверен, что мне не хватает. Я потратил столько времени, пытаясь обойти это, но пока не повезло.

Вот код, который я использую:

<ad:DockableContent ...
                    x:Name="viewRoot"
                    IsCloseable="True" HideOnClose="False"
                    Title="{Binding Title}">    
        <ContentControl Grid.Row="1" Content="{Binding View}"/>
    </Grid>
</ad:DockableContent>

Это используется внутри этого:

<ad:DockingManager x:Name="DockingManagerControl" Grid.Column="1">
                <ad:ResizingPanel x:Name="MainResizingPanel" ResizeWidth="*" ResizeHeight="*" Orientation="Horizontal">
                    <ad:DockablePane ad:ResizingPanel.ResizeWidth="0.25*" prism:RegionManager.RegionName="ProjectBrowserRegion"/>
                    <ad:ResizingPanel x:Name="PespectiveResizingPanel" ResizeWidth="0.75*" ResizeHeight="*" Orientation="Horizontal">
                        <ad:DocumentPane x:Name="DockablePaneControl"/>
                    </ad:ResizingPanel>
                </ad:ResizingPanel>
            </ad:DockingManager>

Привязки содержимого представления являются элементом пользовательского интерфейса, который происходит из отдельных библиотек, поэтому у меня их нет как пары View / ViewModel. Поэтому я не могу использовать ContentTemplate + DataContext здесь. Вещи загружаются хорошо, но использование может выбрать / отменить выбор этих представлений. Таким образом, если представление снова открывает диалоговое окно выбора вида, то я очищаю все представления (я удаляю его из DockablePaneControl Items.Clear ()) и снова добавляю выбранные представления (DockablePaneControl Items.Add ()), затем я получаю это ошибка.

1 Ответ

6 голосов
/ 08 ноября 2011

Обычно это происходит из-за того, что вы пытаетесь назначить один и тот же элемент управления двум разным родителям.

Я часто вижу эту проблему со стилями, где в стиле установлено не шаблонное свойство, содержащее элементы управления, напримеркак ContentControl.Content или DataGridColumn.Header

Например, если ваш стиль устанавливает ContentControl.Content, и вы добавляете два ContentControls в свое окно, вы столкнетесь с этой ошибкой, потому что стиль пытается назначить один и тот жеэлементы управления в разделе Content обоих ContentControls.Исправление заключается в установке стиля шаблона, такого как ContentControl.ContentTemplate вместо ContentControl.Content.Мне нравится говорить, что это все равно, что дать нескольким людям одно и то же печенье - оно просто не работает.Вместо этого вы должны дать им каждый шаблон для печенья (шаблон), чтобы они могли создавать свои собственные.

На самом деле я вижу столько вопросов об этой ошибке, что написал сообщение в блоге об этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...