2013-01-31 6 views
0

WPF DataGrid가 있습니다. 내가 사용하려는XAML Datagrid columns 너비

I)) 1 열 내부 (현재의 "설명"TextBlock의 최대 가능 너비
II) 1 열 내부 (현재)와 나머지
은 III) "자동"폭 이미지 제어를위한 자동 폭 컬럼의.

나는 다음 xaml 코드를 작성했습니다. 그러나 너비가 requriement 당 작동하지 않습니다.

편집 문제 : 두 번째 열 텍스트가 잘리지 않습니다.

스크린 샷 :

enter image description here

어떤 제안이? 감사합니다.

<Grid Margin="10,0,10,0"> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="30"/> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 

     <DataGrid Grid.Row="0" Grid.ColumnSpan="2" ItemsSource="{Binding SelectedItemsCollectionView}" HorizontalAlignment="Stretch" AutoGenerateColumns="False"> 


      <DataGrid.Columns> 
       <!--Get maixmum available space for 1st Column--> 
       <DataGridTemplateColumn Width="*"> 

        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Grid Margin="5,0,0,0"> 
           <Grid.ColumnDefinitions> 

            <!--Get "Auto" space for Image control--> 
            <ColumnDefinition Width="Auto" /> 

            <!--Get remaining available space for Description textblock--> 
            <ColumnDefinition Width="*" ></ColumnDefinition> 

           </Grid.ColumnDefinitions> 

           <Image Grid.Column="0" Stretch="None" Margin="0,0,5,0" Source="{Binding Converter={StaticResource ShowHideToImageConverterRef}, Path=IsHidden}" 
             Visibility="{Binding Converter={StaticResource VisibilityConverterRef}, Path=RowType}" HorizontalAlignment="Center"/> 
           <TextBlock Grid.Column="1" Text="{Binding Description}" VerticalAlignment="Center" HorizontalAlignment="Left" /> 
          </Grid> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

       <!--Get "Auto" space for 2nd Column--> 
       <DataGridTextColumn Binding="{Binding Comments}" Width="Auto" /> 

      </DataGrid.Columns> 
     </DataGrid> 

     <Label Grid.Row="1" Grid.Column="0" Content="Name" ></Label> 
     <TextBox Grid.Row="1" Grid.Column="1" Margin="10,0,0,0" Text="{Binding EmpName}"/> 

    </Grid> 
+0

코드를 복사하여 컴퓨터에서 제대로 작동합니다. 어떤 .NET Framework 버전을 사용합니까? –

답변

1

문제는 "DataGrid column width doesn't auto-update"다른 유래 게시물에 스콧에 의해 제안 솔루션 아래에 적용한 후 해결.

1) DataGridTextColumn 바인딩 (* 크기의 열 제외)에서 NotifyTargetUpdated = True를 설정하십시오.
2) DataGrid에서 TargetUpdated 이벤트에 처리기를 추가합니다.
3) TargetUpdated 이벤트 핸들러에서
- a) DataGrid의 * 크기가 지정된 열의 너비를 0으로 설정합니다.
- b) DataGrid에서 UpdateLayout() 메서드를 호출합니다.
- c) DataGrid의 * 크기가 지정된 열의 너비를 다시 새 DataGridLength (1, DataGridLengthUnitType.Star)로 설정하십시오.