我有WPF数据网格。我想用
i)“描述”文本块的最大可用宽度(存在于第1列内)
ii)图像控制的自动宽度(存在于第1列内)和
iii)列的其余部分的“自动”宽度。
我写了下面的xaml代码。但宽度不符合要求。
修改 问题:相反,第二列文本被截断。
截图:
有什么建议吗? 谢谢!
<Grid Margin="10,0,10,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Row="0" Grid.ColumnSpan="2" ItemsSource="{Binding SelectedItemsCollectionView}" HorizontalAlignment="Stretch" AutoGenerateColumns="False">
<DataGrid.Columns>
<!--Get maixmum available space for 1st Column-->
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Margin="5,0,0,0">
<Grid.ColumnDefinitions>
<!--Get "Auto" space for Image control-->
<ColumnDefinition Width="Auto" />
<!--Get remaining available space for Description textblock-->
<ColumnDefinition Width="*" ></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Stretch="None" Margin="0,0,5,0" Source="{Binding Converter={StaticResource ShowHideToImageConverterRef}, Path=IsHidden}"
Visibility="{Binding Converter={StaticResource VisibilityConverterRef}, Path=RowType}" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="{Binding Description}" VerticalAlignment="Center" HorizontalAlignment="Left" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--Get "Auto" space for 2nd Column-->
<DataGridTextColumn Binding="{Binding Comments}" Width="Auto" />
</DataGrid.Columns>
</DataGrid>
<Label Grid.Row="1" Grid.Column="0" Content="Name" ></Label>
<TextBox Grid.Row="1" Grid.Column="1" Margin="10,0,0,0" Text="{Binding EmpName}"/>
</Grid>
答案 0 :(得分:1)
在应用Scott提出的其他stackoverflow帖子“DataGrid column width doesn't auto-update”之后的解决方案后,问题已得到解决。
1)在DataGridTextColumn Bindings中(除了* size列之外)设置NotifyTargetUpdated = True。
2)在DataGrid上,为TargetUpdated事件添加处理程序
3)在TargetUpdated事件处理程序中:
- a)将DataGrid的* size列的宽度设置为0
- b)在DataGrid上调用UpdateLayout()方法
- c)将DataGrid的* size列的宽度设置回新的DataGridLength(1,DataGridLengthUnitType.Star)