如何使用TextWrapping(WPF)使ListView(或DataGrid)工作

时间:2009-02-05 11:07:46

标签: wpf listview datagrid textwrapping

我的意思是,我在其中一个列中有一个控件和文本。 通常,如果用户更改列大小,则只是剪切文本。如果我正在尝试使用带有textblock或textbox的模板并在模板中设置TextWrapping =“Wrap” - 它实际上并没有改变任何东西。 出路是什么?

*是的,我在询问前搜索过,并在此网站上发现了类似的问题。但没有回答((*


安迪,请回答,尽管我自己也在想它应该这样做。 我舔你的简单变体,它的工作原理。虽然我有一个类似的例子但它没有奏效。唯一的区别是,在模板中,我使用了我的UserControl,它的内容属性中的StackPanel内部有TextBlock和其他控件。经过一小时的Width,Horizo​​ntalAlignment等实验,在我理解的代码的不同部分,我无能为力。 然后 - 我刚刚用Grid更改了StackPanel。而且 - 中提琴! - 有用。我不知道这是一个bug还是只是StackPanel的一些具体反应(实际上我在运行时检查了它的参数 - 这很奇怪:ActualWidth比DesiredSize和Panel的实际宽度更多)。所以如果有人能告诉我 - 为什么会这样呢? - 这会很有趣。如果不是 - 我只使用Grid版本。

2 个答案:

答案 0 :(得分:4)

以下对我有用:

<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>

如果列的宽度不足以显示所有文本,则会导致第一列中的文本换行到多行。

答案 1 :(得分:1)

确保没有定义数据网格RowHeight,或者它将在文本包装后覆盖文本块的“true”高度。