如何使用TextWrapping(WPF)获得ListView(或DataGrid)
我的意思是,我有一个控件,其中一列中有文本。 通常,若用户更改列大小,它只是剪切文本。如果我试图将模板与textblock或textbox一起使用,并在模板内部设置TextWrapping=“Wrap”-它实际上不会改变任何东西。 出路是什么 *是的,我在询问之前搜索过,在这个网站上发现了类似的问题。但没有回答((*如何使用TextWrapping(WPF)获得ListView(或DataGrid),wpf,listview,datagrid,word-wrap,Wpf,Listview,Datagrid,Word Wrap,我的意思是,我有一个控件,其中一列中有文本。 通常,若用户更改列大小,它只是剪切文本。如果我试图将模板与textblock或textbox一起使用,并在模板内部设置TextWrapping=“Wrap”-它实际上不会改变任何东西。 出路是什么 *是的,我在询问之前搜索过,在这个网站上发现了类似的问题。但没有回答((* 安迪,谢谢你的回答,虽然我自己也在想应该这样做。 我检查了你的简单变体,它可以工作。虽然我有一个类似的例子,但它不起作用。唯一的区别是,在模板中,我使用了我的UserContro
安迪,谢谢你的回答,虽然我自己也在想应该这样做。 我检查了你的简单变体,它可以工作。虽然我有一个类似的例子,但它不起作用。唯一的区别是,在模板中,我使用了我的UserControl,它的内容属性内的StackPanel中有TextBlock和其他控件。在试验了一个小时后,在不同的部分使用宽度、水平对齐等我明白,我什么也做不了。
然后-我刚刚用Grid更改了StackPanel。还有-viola!-它工作了。我不知道这是一个bug还是StackPanel的一些特定反应(实际上我在运行时检查了它的参数-这很奇怪:实际宽度超过了面板的期望大小和实际宽度).所以如果有人能告诉我-为什么会这样?-这会很有趣。如果没有-我将只使用带有网格的版本。以下内容对我有用:
<ListView ItemsSource="{Binding Source={StaticResource MyItems}}">
<ListView.View>
<GridView>
<GridViewColumn Width="50" Header="Column 1">
<GridViewColumn.CellTemplate>
<DataTemplate x:Name="col1Template">
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding Path=Column1Text}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
...
</GridView>
</ListView.View>
</ListView>
...
如果列的宽度不足以显示所有文本,则会导致第一列中的文本换行到多行。请确保未定义datagrid RowHeight,否则将在换行后覆盖textblock的“真实”高度