gpt4 book ai didi

WPF Datagrid 列宽问题

转载 作者:行者123 更新时间:2023-12-02 03:46:32 25 4
gpt4 key购买 nike

我在 DataGrid 中有列,这些列由 ObservableCollection 设置,这是我创建的简单数据对象的类型。第一列的宽度设置为“Auto”,第二列的宽度设置为“1*”。

我目前正在使用答案here中的方法当 ItemsSource 更改时自动更新设置为“自动”的列的宽度。这似乎在大多数时候都有效:

enter image description here这看起来不错,而且一直有效

虽然,当 ItemsSource 稍微大一点(比如说大约 30-35 条记录)时,“自动”宽度(第一个)列只会DataGrid(包括滚动条)被点击时:

enter image description here 如果没有被点击,它会被适当调整大小

我的 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();
}

有什么理由只有当列表像这样更长时才会发生这种情况吗?

最佳答案

DataGrid 的 TargetUpdated 在少数情况下可能不会被调用。例如,当您有更多行进入但它们不可见时,数据网格不必“浪费周期”重新呈现不可见的内容。最初的 TargetUpdated 没问题,但您可能必须找到一个额外的 Hook ,并在那里做类似的事情,例如 Hook 到绑定(bind)到 的对象的 CollectionChanged您的 datagrid 的 >ItemsSource,您的 observableCollection 有事件 CollectionChanged,订阅并在那里尝试您的逻辑。

关于WPF Datagrid 列宽问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16603653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com