当行折叠时动态调整datagrid列的大小

我有一个DataGrid控件dgChangesMade,带有ItemsSource = ObservableCollection<CheckinPath>

第一列dgPath是DataGridTemplateColumn,由

  • 复选框

  • TextBlock。转换器为后者返回一条相对路径。数据网格行的可见性绑定到IsVisible属性。

除了DataGrid控件外,我还有一个CheckBox控件:

  • IsChecked事件绑定到布尔属性IsChecked。设置器设置绑定到DataGrid的项目源的对象的IsVisible属性。因此数据网格行被折叠/当该复选框(未)示出检查。

  • SourceUpdated事件绑定到CheckBox_SourceUpdated

就像Scott在另一个线程中指出的那样:

DataGrid将增加列的大小以适应数据变长的情况,但是当数据长度减小时,它不会自动减小列的大小

所以在CheckBox_SourceUpdated事件中

  1. 将列宽设置为0

  2. 强制更新DataGrid的布局

  3. 将列宽设置为自动

不幸的是,这没有帮助。当(取消)选中复选框控件时,列的宽度会在需要时增加(请参见屏幕截图中的2),但不会根据datagrid列中的数据长度自动减小(请参见屏幕截图3中的内容,其中3显示与以下内容相同的内容) 1)。

有任何想法吗?

截屏

http://img2.mukewang.com/60837a4c000126b012310316.jpg

XAML


<DataGrid Name='dgChangesMade' Width='Auto' ItemsSource="{Binding Path=ChangesMade}">

    <DataGrid.Resources>

        <DataGridTemplateColumn Width='Auto' x:Key='dgPath' Header='Path' IsReadOnly='True' x:Shared='False'>

        <DataGridTemplateColumn.CellTemplate>

            <DataTemplate>

                <StackPanel Orientation='Horizontal' VerticalAlignment='Center'>

                    <CheckBox IsChecked='{Binding IsChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}'>

                    <TextBlock Text='{Binding Converter={StaticResource CheckinPathConverter}, ConverterParameter="Path"}' />

                    </StackPanel>

                </DataTemplate>

            </DataGridTemplateColumn.CellTemplate>

        </DataGridTemplateColumn>


        <Style x:Key='dgShowHideRow' TargetType='DataGridRow'>

            <Setter Property='Visibility' Value='{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter="Collapsed", Mode=TwoWay}' />

        </Style>


    <DataGrid.Columns>

        <StaticResource ResourceKey='dgPath' />

        <StaticResource ResourceKey='dgStatus' />

        <StaticResource ResourceKey='dgLock' />

    </DataGrid.Columns>

    <DataGrid.ItemContainerStyle>

        <StaticResource ResourceKey='dgShowHideRow' />

    </DataGrid.ItemContainerStyle>

</DataGrid>



Qyouu
浏览 216回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP