2013-08-15 2 views
1

Canvas에 "벽돌"배열을 그려야하는 WPF 프로그램이 있습니다. 각각 다른 벽돌 유형이 몇 가지 있습니다.XAML 템플릿에서 WPF 요소 배열 생성

각 벽돌 유형을 상당히 임의의 XAML 조각을 사용하여 그립니다.

<Canvas> <!-- or some other per-brick container --> 
    <Rectangle Fill="Brown" Stroke="Gray" StrokeThickness="0.1" Canvas.Left="-1" Canvas.Top="-1" Width="2" Height="2" /> 
    <Ellipse Fill="Blue" Canvas.Left="-0.8" Canvas.Top="-0.8" Width="1.6" Height="1.6"/> 
</Canvas> 

는하지만 코드 숨김 번역하고 각 위치에 복사 회전이 조각 여러 번 복제 할.

내 벽돌 위치를 계산해야한다는 것을 제외하고는 ItemsControl과 비슷합니다. 또한 ControlTemplate과 비슷한 것으로 보이지만 문제를 해결할만큼 충분히 이해하지 못합니다.

어떻게해야하는지 설명 할 수 있습니까?

답변

1

몇 가지 접근법이 있지만보기 모델과 네, ItemsControl을 사용하고 있습니다. ItemsControl이 사용해야하는 컨테이너의 유형을 지정하고 Canvas를 전달한 다음 Bricks 컬렉션을 ItemsControl의 ItemsSource에 바인딩 할 수 있습니다.

그런 다음 각 유형의 브릭에 대해 해당 유형을 렌더링하는 방법을 지정하는 DataTemplate을 정의 할 수 있습니다. 항목에 X 및 Y와 같은 속성이 있으면 DataTemplate의 Canvas.Left 및 Canvas.Right 속성에 바인딩 할 수 있습니다.

좋은 예는 https://stackoverflow.com/a/1030191/430661입니다. upvoted 대답, 선택한 하나는 제외). 단, 항목 템플릿은 DataTemplates 대신 인라인으로 지정됩니다. itemTemplate을 비워두고 프레임 워크가 유형을 기반으로 적절한 DataTemplate을 선택하도록합니다.

다른 한편으로는 화면에 많은 벽돌이 있거나 복잡한 애니메이션을 수행 할 것으로 예상되는 경우 ... 이와 같은 시나리오에서는 충분하지 않습니다. 하지만 어쨌든 WPF를 사용하지 않는 것이 좋습니다.

더 많은 도움이 필요하면 샘플을 함께 보낼 수 있습니다.

+0

올바른 접근 방식 (일반적인 벽돌 개수는 약 20-100)입니다. 내가 모르는 것은 Canvas를 ItemsControl에 전달할 수 있다는 것입니다. 다른 질문에 대한 샘플 @ qntmfred의 대답은이를 수행하는 방법을 보여줍니다, 맞습니까? 일단 내가 일하면 당신의 대답을 받아 들일 것으로 기대합니다. –

+0

그래, ItemsControl의 ItemsPanel을 ItemsPanelTemplate 안에 Canvas로 지정하면됩니다. –

+0

지금까지 효과가 있습니다. 하지만 여러 Datatemplates를 사용하고 올바른 데이터 템플릿을 선택하는 방법을 이해하지 못합니다. (최악의 경우 최악의 경우 여러 ItemsControls를 사용할 수 있지만 잔인합니다.) –