在WPF的XAML中,使用ListView来呈现数据,在中间需要使用TextBox来进行数据的呈现和输入的时候,很头疼,默认它并不会根据所在ListView的列来调整它的大小。浪费了很多的工夫,找到一个堪堪可用的方法:
常规的代码是这样的:
<GridViewColumn Header="Column A">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="Sample Text"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
在上述代码里,不管你是给TextBox设置任何的内容它都不能自适应列的宽度,不管是HorizontalAlignment="Stretch"
还是别的,都没有用。
最后用下面的方法可以实现,在它的外面套一个Grid,然后让Grid的宽度跟所在列的ActualWidth
一致,然后通过对TextBox的Margin
的属性设置为0,0,12,0
来实现效果的优化(在别的系统上这个值可能不同,具体自行尝试调整12
这个数字以实现最佳效果)即可:
<GridViewColumn Header="Column A" x:Name="colA">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid Width="{Binding ElementName=colA, Path=ActualWidth}">
<TextBox Text="Sample Text" Margin="0,0,12,0" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
使用以上方法有个问题,双击ListView的列标题自动调整列宽的时候,它无法实现,它会不停增长长度。