Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF数据网格列宽问题_Wpf_Datagrid_Width - Fatal编程技术网

WPF数据网格列宽问题

WPF数据网格列宽问题,wpf,datagrid,width,Wpf,Datagrid,Width,我在DataGrid中有一些列,它们是由我创建的简单数据对象类型的observateCollection设置的。第一列的宽度设置为“Auto”,第二列的宽度设置为“1*” 我目前正在使用答案中的方法自动更新列的宽度,当ItemsSource更改时,该列的宽度设置为“Auto”。这似乎在大多数情况下都有效: 这看起来很棒,而且一直都有效 尽管如此,当项目资源稍大一点时(比如30-35条记录),只有在单击数据网格(包括滚动条)时,“自动”宽度(第一)列才会缩小: 如果未单击,将正确调整其大小 我的

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

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

这看起来很棒,而且一直都有效

尽管如此,当
项目资源
稍大一点时(比如30-35条记录),只有在单击
数据网格
(包括滚动条)时,“自动”宽度(第一)列才会缩小

如果未单击,将正确调整其大小

我的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>

是否有任何原因只有当列表较长时才会发生这种情况?

DataGrid的
TargetUpdated
在少数情况下可能不会被调用。例如,如果有更多行进入,但它们不可见,那么datagrid就不必“浪费周期”重新呈现不可见的内容。初始的
TargetUpdated
很好,但是您可能必须找到一个附加的钩子,并在那里执行类似的操作,例如钩住绑定到
datagrid
ItemsSource
的对象的
CollectionChanged
,您的
observectedCollection
已更改事件
CollectionChanged
,订阅并尝试你的逻辑

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