DataGrid
의 열은 내가 만든 간단한 데이터 개체의 유형 인 ObservableCollection
으로 설정됩니다. 첫 번째 열의 너비는 "자동"으로 설정되고 두 번째 열은 너비가 "1 *"으로 설정됩니다.WPF Datagrid 열 너비 문제
ItemsSource
변경시 "자동"으로 설정된 내 열의 너비를 자동 업데이트하려면 here 응답 방법을 사용하고 있습니다. 이것은 대부분의 시간을 작동하는 것 같다 :이 훌륭 및 모든 시간을 작동
ItemsSource
조금 큰 경우 (약 30 ~ 35 기록을 말할 수),하지만
상기 "자동"폭 (첫번째) 열에 다운 감소 할 만 (스크롤바 포함)가 DataGrid
는 클릭이다 :
을 이 클릭되지 않은 경우이 제대로 조정됩니다
내 XAML은 다음과 같습니다 : 코드는 컬럼의 갱신을 보장하기
<my:DataGrid CanUserSortColumns="false" CanUserResizeRows="false" CanUserResizeColumns="false" CanUserReorderColumns="false" CanUserDeleteRows="false" CanUserAddRows="false" AutoGenerateColumns ="False" SelectionMode="Single" SelectionUnit="Cell" Height="113" HorizontalAlignment="Left" Margin="11,22,0,0" Name="dataGrid" VerticalAlignment="Top" Width="226" Background="#FFE2E2E2" AlternatingRowBackground="#FFA4CFF2" BorderBrush="#FF7C7C7C" HorizontalGridLinesBrush="White" PreviewKeyDown="dataGrid_PreviewKeyDown" CellEditEnding="dataGrid_CellEditEnding" BeginningEdit="dataGrid_BeginningEdit" PreparingCellForEdit="dataGrid_PreparingCellForEdit" SelectedCellsChanged="dataGrid_SelectedCellsChanged" Loaded="dataGrid_Loaded" TargetUpdated="dataGrid_TargetUpdated">
<my:DataGrid.Columns>
<my:DataGridTextColumn Binding="{Binding Path=Name, NotifyOnTargetUpdated=True}" Width="Auto">
<my:DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type my:DataGridCell}">
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"></Setter>
<Setter Property="IsHitTestVisible" Value="False"></Setter>
<Setter Property="Focusable" Value="False"></Setter>
<Setter Property="Background" Value="WhiteSmoke"></Setter>
<Setter Property="BorderBrush" Value="LightGray"></Setter>
</Style>
</my:DataGridTextColumn.CellStyle>
</my:DataGridTextColumn>
<my:DataGridTextColumn Binding="{Binding Path=Value}" Width="1*"></my:DataGridTextColumn>
</my:DataGrid.Columns>
</my:DataGrid>
가 : private void dataGrid_TargetUpdated(object sender, DataTransferEventArgs e)
{
dataGrid.Columns[0].Width = 0;
dataGrid.UpdateLayout();
dataGrid.Columns[0].Width = new DataGridLength(0, DataGridLengthUnitType.Auto);
dataGrid.UpdateLayout();
}
인가 목록이 더 길 때만 이런 일이 일어날 수 있습니다.