我有一个DataGrid控件dgChangesMade,带有ItemsSource = ObservableCollection<CheckinPath>
。
第一列dgPath是DataGridTemplateColumn,由
复选框
TextBlock。转换器为后者返回一条相对路径。数据网格行的可见性绑定到IsVisible属性。
除了DataGrid控件外,我还有一个CheckBox控件:
IsChecked事件绑定到布尔属性IsChecked。设置器设置绑定到DataGrid的项目源的对象的IsVisible属性。因此数据网格行被折叠/当该复选框(未)示出检查。
SourceUpdated事件绑定到CheckBox_SourceUpdated
就像Scott在另一个线程中指出的那样:
DataGrid将增加列的大小以适应数据变长的情况,但是当数据长度减小时,它不会自动减小列的大小
所以在CheckBox_SourceUpdated事件中
将列宽设置为0
强制更新DataGrid的布局
将列宽设置为自动
不幸的是,这没有帮助。当(取消)选中复选框控件时,列的宽度会在需要时增加(请参见屏幕截图中的2),但不会根据datagrid列中的数据长度自动减小(请参见屏幕截图3中的内容,其中3显示与以下内容相同的内容) 1)。
有任何想法吗?
截屏
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>
相关分类