2012-08-04 3 views
0

모든 정보가 포함되도록 노력하십시오.일반적이고 구속력이있는 균일 한 스트레치 레이아웃

은 거의 그래서 같은 원 세포의 뷰 (VM 상응하는 뷰)가 필요합니다 :

******** 
    ********** 
************ 
************** 
************** 
************** 
************** 
************ 
    ********** 
    ******** 

합병증의 몇 : 우리는 내가 얼마나 많은 세포를 모르는 해고하기 전에 표시 할 수 있습니다. 모든 셀의 크기는 동일해야합니다. 전체보기는 확장 가능해야합니다.

단순화 된 세계에서 내 창은 20 개의 RowViewModel 개체를 만들고 각 생성자에게 만들어야하는 열 수를 전달합니다.

내 주요보기 :

<Viewbox Stretch="Uniform"> 
    <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}},Path=Rows}" > 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Rows="{Binding Path=Rows.Count}" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Viewbox> 

그리고 내 RowView :

<Grid> 
    <ItemsControl ItemsSource="{Binding Columns}" > 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Columns="{Binding Columns.Count}"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 

내 휴대보기 : 가진 행 그래서 약자로

<Border > 
    <Viewbox Stretch="Uniform" > 
     <Label FontSize="10" Content="{Binding Notice}" Foreground="White" /> 
    </Viewbox> 
</Border> 

, 모든 행이 같은 폭 셀 수가 적 으면 셀이 더 넓어집니다. 각 행에 20 개의 셀이 있다고 말하면 각 셀의 크기는 같지만 HorizontalAlignment 설정에도 불구하고 모든 것이 공백 셀을 추가하기 때문에 왼쪽에 정렬됩니다. 나는 내가 원하는 곳에 공백의 셀을 삽입 할 수 있다고 가정하고 있지만 이것은 데이터를 퍼지하여 디스플레이가 올바르게 보이도록 만든다고 생각합니다. B-A-D는 동의 할 것입니다.

나는 여러 가지 접근법을 시도해 보았으며 이것이 지금까지 가장 근접하다고 생각하지만 나는 그것을 놓치고있다. 제발 도와 줄 수있어?

양해 해 주셔서 감사합니다.

답변

0

글쎄, 아마도 불가능할까요? 그리드를 생성하고 생성 중에 적절한 행/열을 할당 한 다음 해당 그리드에 contentcontrol을 데이터 바인딩하는 ViewModel에 속성을 추가했습니다.

XAML에서 어떻게해야합니까?

보기 : 뷰 모델에서

<Viewbox Stretch="Uniform"> 
    <ContentControl Content="{Binding PrettyGrid}" /> 
</Viewbox> 

:

public Grid PrettyGrid 
{ 
    get 
    { 
     return BuildGrid(data); 
    } 
} 

및 BuildGrid 단편 :

private static Grid BuildGrid(List<objects> cellData) 
{ 
    var localGrid = new Grid(); 

    // ... 

    localGrid.RowDefintions.Add(...); 
    localGrid.ColumnDefinitions.Add(...); 

    cellData.ForEach(cell => 
    { 
     ContentControl ctl = new ContentControl(); 
     ctl.Content = cell; 
     Grid.SetRow(ctl, cell.Row); 
     Grid.SetColumn(ctl, cell.Column); 
     localGrid.Children.Add(ctl); 
    }); 

    return localGrid; 
}