항목 사이에 구분 기호가있는 ItemsControl
을 만들려고합니다 (예 : 탐색 빵 부스러기를 만드는 컨트롤). 컨트롤이 완전히 일반화되기를 바랍니다.Items instantiatePanelTemplate
내 원래 메서드는 ItemsControl
을 확장하고 SeparatorTemplate 속성을 추가 한 다음 클래스를 ItemsControl의 ItemsHost
에 추가하도록했습니다. 이 접근 방식의 문제점은 컨테이너 패널에 추가 항목을 추가하면 ItemGenerator가 혼란스럽고 항목이 잘못되어 올바르게 제거되지 않는다는 것입니다.
그래서 내 두 번째 계획은 ItemsControl
을 에뮬레이트 할 완전히 새로운 컨트롤을 만드는 것이지만 실행중인 문제는 ItemsPanelTemplate
을 인스턴스화하는 방법을 찾을 수 없다는 것입니다. ItemsControl
과 같은 ItemsPanel 속성을 제공하고 싶습니다. 그런 다음 해당 템플릿에서 패널을 만들 수 없습니다.
누구나 ItemsPanelTemplate
을 인스턴스화하거나 ItemsControl
의 패널에 컨트롤을 추가하는 방법을 ItemGenerator를 깨지 않고 생각할 수 있습니까?
필자는 ItemContainer에 구분 기호를 포함하지 않아도되도록 노력하고있었습니다. 기본 템플릿에 포함 시키면 마지막 항목이 무엇인지 관리해야하므로 마지막 항목에 구분 기호가 표시되지 않도록 할 수 있습니다. ItemContainer에 포함시키는 다른 문제는 ItemsPanel의 레이아웃을 따르지 않는다는 것입니다. 나는 ItemsPanel을 제공 할 수 있고 다른 Items 인 것처럼 정확하게 레이아웃 할 수 있기를 원합니다. – Stephan
@ 스탄 : 좋은 지적. "LastItem"시각적 상태를 포함하면 "관리"가 솔루션에 관계없이 불가피한 추가 구분 기호로 도움이 될 수 있습니다. 방향에 관해서는 디자이너가 기본 패널을 대체하는 것으로 선택되면 'BreadCrumbItemStyle' 속성을 통해'BreadCrumbItem' 템플릿을 대체해야합니다. 개인적으로 나는 이것이 합리적인 장소라고 생각합니다. 컨트롤은 상자 밖에서 받아 들여지는 작업을 수행하며, 소비자가 원하는 경우 인식을 넘어선 스타일을 지정할 수 있습니다. – AnthonyWJones
그럼 ItemsSource를 오버로드하고 목록에 구분 기호를 삽입하여 실제 ItemsSource에 밀어 넣기로했습니다. 누군가가'base.ItemsSource' 자체에 접근 할 수 있기 때문에 그것이 가장 안전한 방법이 아닐지도 모른다는 것을 압니다. 그러나 그것은 제가 찾고있는 것을 나에게주었습니다. 당신의 도움을 주셔서 감사합니다. – Stephan