WPF中ListView中如何让TextBox的宽度与列宽适配

在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的列标题自动调整列宽的时候,它无法实现,它会不停增长长度。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容