如何在WPF ListView中包装内容?

时间:2012-10-24 19:07:36

标签: wpf listview

我有一个非常简单的WPF ListView,我用它来列出文本块。我希望它垂直滚动,但文本应该换行,这样就没有水平滚动。我见过的所有例子都是过于复杂的DataGridView嵌套解决方案。然而,这似乎是一个简单的用例。这是我目前的代码:

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

我已尝试设置ScrollViewer.Horizo​​ntalScrollBarVisibility和Horizo​​ntalContentAlignment属性,但文本只是在控件的末尾运行而不会换行。

每个项目都会添加到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 个答案:

答案 0 :(得分:14)

这应该是你需要的

<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)的类型为string,您只想绑定到字符串本身。

有关详细信息,请参阅<{3>}部分指定值的路径

答案 1 :(得分:0)

我想在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 ...

我希望,它可以帮助某人 ; - )