2011-03-10 4 views
3

찾기 동적은 WCF는 FindName()에 의해 제어 생성

는하지만이 anty 흐름이 완만하고 ... 그것은 정직해야 같은 부모 컨트롤 내에서 컨트롤을 찾는 FramworkElement.FindName() 메소드가 보인다는 것 같아 프레임 워크는 내가하려는 일을 좋아하지 않습니다.

우선, 일을하는 데는 여러 가지 방법이 있으며 WPF에서 만드는 첫 번째 형식임을 명심하십시오.

컬렉션의 항목 수를 기준으로 StackPanel에 컨트롤을로드하고 있습니다. 모음이 [사용자가 입력 한 URL] 내의 디렉토리 수에 의해 결정되므로이 방법은 필수입니다.

목록은 설계 중에 양식에 놓인 수직 스택 패널에 수평 스택 패널을 만듭니다.

그래서 dirStackPanel이 양식에 있습니다. controlStackPanel을 n 번 dirStackPanel에 삽입하고 각 이름을 식별 이름 (string) ("controlStackPanel"+ n)으로 지정합니다.

controlStackPanel에 컨트롤을 채우지 만 부모 (dirStackPanel)에서 controlstackPanel을 검색 할 수 없다는 것을 고려하면 문제가됩니다.

예 :

var getPanel = (StackPanel) this.dirStackPanel.FindName((string)("controlStackPanel" + n))반환이

그래서 명확하게하는 경우는 null, 내가 런타임에 삽입하고 각 컨트롤은 이름이 할당되고 쉽게 루프를 사용하여 검색 할 수 있습니다. 그러나 FindName 메서드는 부모 "StackPanel"의 첫 번째 자식 컨트롤에서 작동하지 않습니다. 객체가 아닌 null을 반환합니다.

어떤 아이디어?

답변

8

컨트롤을 동적으로 만들려면 RegisterName을 먼저 호출해야 해당 컨트롤을 찾을 수 있습니다. 예를 들어

:

dirStackPanel.RegisterName(controlStackPanel.Name, controlStackPanel);