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.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);

谢谢你。

4

2 回答 2

20

这应该是你需要的

<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指定值的路径部分

于 2012-10-25T07:26:31.850 回答
2

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

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

于 2017-03-05T10:16:57.517 回答