2012-06-22 3 views
1

3 가지 컨트롤 유형의 컬렉션을 표시 할 수있는 WPF 컨테이너를 만들어야합니다. 각 컨트롤의 높이와 너비는 다른 컨트롤을 기반으로합니다. 예를 들어, controlA가 200X200이면 controlB는 100X200이고 controlC는 50X50이됩니다. 사용할 수있는 공간과 각 컨트롤 유형의 양에 따라 최상의 레이아웃을 찾음으로써 이러한 컨트롤을 정렬 할 수있을 정도로 컨테이너를 똑똑하게 재현 할 수있는 방법을 찾아야합니다.WPF 컨테이너/격자 레이아웃

우리는 controlA의 인스턴스 1 개, controlB의 인스턴스 1 개 및 controlC의 인스턴스 2 개가있는 경우를 생각해보십시오. 순차적 컨트롤 목록과는 대조적으로이 우아하게 배치 된 방법을 사용하면 컴팩트 한 모양을 유지하게됩니다.

container http://onlinegolfpool.com/images/grid.png

해결하는 방법에 어떤 아이디어? 그리드를 사용하여 직접 계산해야합니까? 사전

+0

"5 개의 controlA 인스턴스, 3 개의 controlB 인스턴스 및 3 개의 controlC 인스턴스"에 대한 예제가 있습니다. 이런 상황에서 비율은 같습니까? A가 여전히 B의 높이의 두 배가되고 B는 C의 너비의 두 배가되는 것을 의미합니까? – Rachel

+0

예, 유형/컨트롤의 비율 (크기)은 항상 동일합니다. 유형/컨트롤의 수만 다릅니다. – MickeySixx

+0

커스텀'Panel'을 생성하거나 데이터에 알고리즘을 수행하여 필요한 행/열 수와 각 항목의 행/열 수를 결정할 수 있는지 판단한 다음 'ItemsPanelTemplate'을'Grid'로 설정 한'ItemsControl' – Rachel

답변

1

당신은 확실히 그리드를 사용해야하지만, 심지어 각 셀에 대한 상대적인 크기를 정의하기 위해 자신의 : 사용 별표 (*)에이 계산 생각하지 않습니다에

감사합니다. WPF가 나머지 작업을 수행합니다.

예 :

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <Rectangle Fill="Pink" Stroke="Black" Grid.RowSpan="2"/> 
    <Rectangle Fill="Blue" Stroke="Black" Grid.Column="1" Grid.ColumnSpan="2"/> 
    <Rectangle Fill="Yellow" Stroke="Black" Grid.Row="1" Grid.Column="1"/> 
    <Rectangle Fill="Yellow" Stroke="Black" Grid.Row="1" Grid.Column="2"/> 
</Grid> 

별표는 매우 강력하고, 많은 사람들은 그것을 즐기십시오 :)에 대해 알고하지 않습니다!

+0

그래도 컨트롤 A의 인스턴스 5 개, 컨트롤 B의 인스턴스 3 개, 컨트롤 C의 인스턴스 11 개가 있으면 어떻게됩니까? 이러한 상황을 처리 할 수있을만큼 유연하고 똑똑한 무언가가 필요합니다. – MickeySixx

+0

그런 다음 셀에 중첩 된 UniformGrid를 사용할 수 있습니다. –

+0

.xaml 예제를 볼 수 있습니까? 예를 들어 색상 목록에 바인딩하여 ItemSource {Binding Path = MyColorsCollection}을 설정할 수 있습니까? – MickeySixx

0

제 제안은 gridpanel 대신 스택 패널을 사용하는 것입니다. 그런 다음 원하는 모든 컨트롤에 하드 코드 된 너비를 지정하고 나머지 영역은 조정됩니다.

<StackPanel Orientation=Horizontal> 
<leftcontrol/> 
<StackPanel Orientation=Vertical> 
<firstcontrol/> 
<StackPanel Orientation=Horizontal> 
<bottomLeftControl/> 
<bottomRightControl/> 
</StackPanel> 
</StackPanel> 
</StackPanel> 
+0

그래,하지만 내가 controlA의 인스턴스 5 개, 인스턴스 3 개를 가질 때 어떻게 될까? controlB 및 11 controlC? 이러한 상황을 처리 할 수있을만큼 유연하고 똑똑한 무언가가 필요합니다. – MickeySixx

+0

DockPanel을 사용하여 레이아웃 – dreamerkumar

+0

Vishal을 처리하게합니다. .xaml 예제를 제공 할 수 있습니까? 하나의 예제에서 ItemSource {Binding Path = MyColorsCollection}을 설정할 수있는 색상 목록에 바인딩하고 있습니까? – MickeySixx