如何在WPF ListView中包装内容?

9

我有一个非常简单的WPF ListView,用于列出文本块。我希望它可以垂直滚动,但文本应该自动换行,以便没有水平滚动条。我看到的所有示例都是过于复杂的DataGridView嵌套解决方案。然而,这似乎是一个非常简单的用例。以下是我的当前代码:

<ListView  
        Height="Auto"
        Width="Auto"
        Margin="0"
        Name="mLogListView" 
        FontWeight="Bold"
        FontSize="16"
        SelectionMode="Single"
        ScrollViewer.HorizontalScrollBarVisibility="Disabled"
        HorizontalContentAlignment="Stretch"/>

我已经尝试设置ScrollViewer.HorizontalScrollBarVisibility和HorizontalContentAlignment属性,但是文本仍然从控件的末端溢出而不换行。
每个项目都添加到ListView.Items集合中,并且是ListViewItem对象。文本设置为项目的Content属性。
以下是添加文本项的代码:
ListViewItem item = new ListViewItem();            
item.Content = "Item text is set here, but refuses to wrap in list view!";
mLogListView.Items.Add(item);

谢谢。

2个回答

22

这应该就是你所需的内容

<ListView Margin="12,23,309,191"
        Name="mLogListView" 
        FontWeight="Bold"
        FontSize="16"
        SelectionMode="Single"
        ScrollViewer.HorizontalScrollBarVisibility="Disabled"
        HorizontalContentAlignment="Stretch" >
<!-- here set the itemTemplate to a TextBlock that can wraps-->
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=.}" TextWrapping="Wrap"></TextBlock>
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>
请注意语法Text="{Binding Path=.}"等同于Text="{Binding}"。这被称为空绑定语法
在此情况下,Text绑定到整个ListViewItem对象。当您想要绑定到项目的整个对象而不仅仅是单个属性时,空绑定语法很有用。
对于本示例非常方便,因为源对象(ListViewItem)是字符串类型,您只需将其绑定到字符串本身即可。
有关更多信息,请参见msdn指定值的路径部分。

那个 MSDN 链接已经失效了。 请尝试这个链接:https://msdn.microsoft.com/zh-cn/library/vstudio/ms752347(v=vs.100).aspx#specifying_the_path_to_the_value - Detail

5

我希望在 ListView 中查看图片,但默认情况下它只显示一列。为了避免这种情况,您可以插入以下代码:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel Margin="0" />
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

现在显示的是ListView,而不是一列,只有一行 :-( 为了防止这种情况,您可以插入以下代码行:
ScrollViewer.HorizontalScrollBarVisibility="Disabled"

因此,它可能看起来像这样:
<ListView ItemsSource="{Binding YourItemsSource...}"
            ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border ... and so on ...

我希望这能对某些人有所帮助;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接