2011-02-09 8 views
2


내 XAML 디자인에 다음과 같은 문제가 있습니다.바인딩 눈금 열 너비

내 데이터를 그리드처럼 정렬하려면 사용자 지정 DataTemplate으로 도착해야합니다. 그래서 데이터 항목의 두 헤더 lables를 포함하는 상단 Grid을 만듭니다. Grid 아래에 나는 ItemsControl과 함께 StackPanel을 만들고 내 데이터를 표시하는 DataTemplate을 포함합니다. 모든 것은 괜찮습니다. 응용 프로그램을 실행할 때 머리글 lables와 아래의 데이터 항목이 그리드처럼 나타납니다. 내 문제는 레이블과 항목의 내용이 올바르게 정렬되지 않았습니다. 그래서 의 ActualWidth에 대한 헤더 lable 열의 Width 바인딩에 대해 생각했지만 불행히도 작동하지 않습니다.

이 문제를 해결할 수있는 명확한 방법이 있습니까?
미리 감사드립니다.

답변

5

SharedSizeGroup을 그리드 열로 사용하고 Grid.IsSharedSizeScope="True"을 부모로 사용하는 쉬운 방법이 있습니다.

예컨대

<StackPanel Grid.IsSharedSizeScope="True"> 
     <Grid Name="Headers"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition SharedSizeGroup="A"/> 
       <ColumnDefinition SharedSizeGroup="B"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Column="0" Text="Name"/> 
      <TextBlock Grid.Column="1" Text="Occupation"/> 
     </Grid> 
     <ItemsControl Name="Items" ItemsSource="{Binding Data}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition SharedSizeGroup="A"/> 
          <ColumnDefinition SharedSizeGroup="B"/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Column="0" Text="{Binding Name}"/> 
         <TextBlock Grid.Column="1" Text="{Binding Occupation}"/> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </StackPanel> 

모든 항목이 컬럼에서 동일한 폭을해야합니다, 당신은 수동으로 정렬 할 수있는 유일한 방법은 여백 설정 등에 따라 항목 위의 헤더 부분이다.

+0

+1 - 이것은 모든 사람이 알아야 할 명백하지 않은 WPF 기술 중 하나입니다. –

+0

@Robert Rossney : 당연히 일반적인 문제에 대한 다소 우아한 해결책입니다. –