2012-07-06 1 views
1

대부분의 경우 "새 패널에 추가하기 전에 이전 부모에서 요소를 제거합니다"라고 말합니다. 나는 이것이 다른 상황에서 이미 여러 번 적용했으며,이 특별한 경우에는 효과가없는 이유를 설명 할 수 없다는 것을 알고 있습니다.Panel에 UIElement를 추가하면 InvalidOperationException이 발생합니다. "다른 요소의 이미 logicial 하위 요소입니다."

여기 내 디버그 세션의 추출물이며, 예외가 일어난 곳 :

enter image description here

당신이 볼 수 있듯이, 내 요소의 부모는 아이가없는! 조언이 있으십니까? 이 문제를 어떻게 진단 할 수 있습니까? 감사 !

편집 : 요소가 이전에 XPS를 생성하는 데 사용 된 패널에 추가되었으며 생성이 완료된 후 제거되었습니다. ==> 이것은 "AddNewSpecialElement 메소드"에 들어가기 전에 끝났지 만, 위의 문제를 변경해서는 안됩니다.

+0

디버그 세션을 볼 수 없습니까? – Whyrusleeping

+0

디버그 세션은 코드 및 고정 변수가 포함 된 이미지입니다. 여기에 있습니다 : http://i.stack.imgur.com/Ac7xJ.png – JYL

+0

WPF에는 두 개의 트리가 있습니다 : 논리적 (코드) 트리와 비주얼 (UI) 트리. 비주얼 트리에서 객체를 제거하는 것처럼 들리지만 논리적 트리에서는 그렇지 않습니다. 부모에게서 어떻게 원소를 제거하고 있습니까? – Rachel

답변

0

문제가 해결되었습니다. 설명.

  1. 이 화면에 시각 자료의 목록을 (모든 영상은 하나의 StackPanel에 배치됩니다) ==> 확인
  2. 가 StackPanel의에서 영상을 제거립니다

    문제는 그 논문의 단계를 수행 할 때 등장 내 자신의 DocumentPaginator에서 사용 ===> Ok

  3. 인쇄하거나 내보내십시오 (예 : PrintQueue.CreateXpsDocumentWriter().Write(paginator) 사용). ==> Ok
  4. 내보내기가 완료되고 Paginator가 처리되면 원래 StackPanel에 비주얼을 추가하여 화면에 다시 표시합니다. ==> Ok
  5. 2 단계에서 반복하여 새 XPS 내보내기를 시작하십시오. ==> 예외!

내가 Paginator를 처리하는 것으로 충분하다고 생각했습니다. 4 단계가 잘 작동했기 때문에 그렇지 않다고 생각할 이유가 없었습니다. 사실, 3b 단계에서 Paginator 내부의 부모 영상에서 영상을 명시 적으로 제거해야했습니다.

읽어 주셔서 감사합니다.

관련 문제