3

私が作成した単純なデータ オブジェクトの型であるDataGridによって設定されている に列があります。ObservableCollection最初の列の幅は「Auto」に設定され、2 番目の列の幅は「1*」に設定されています。

現在、ここでの回答の方法を使用して、変更時に「自動」に設定されている列の幅を自動更新していItemsSourceます。これはほとんどの場合うまくいくようです:

ここに画像の説明を入力 これは見栄えがよく、常に機能します

ただし、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();
    }

リストがこのように長い場合にのみ、これが発生する可能性がある理由はありますか?

4

1 に答える 1