ListBox中具有绑定数据的新行

本文关键字:数据 新行 绑定 ListBox | 更新日期: 2023-09-27 18:03:20

我使用以下简单代码将对象列表中的数据放入ListBox:

<ListBox Name="lbxListaZadan">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel xml:space="preserve" Orientation="Horizontal">
                <TextBlock Text="{Binding title}" />
                <TextBlock Text="&#10;" />
                <TextBlock Text="Priorytet: " />
                <TextBlock Text="{Binding priority}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

代替预期输出:

Task1
Priorytet: 1
Task2
Priorytet:2
Task3
Priorytet: 3

我得到:

Task1Priorytet: 1
Task2Priorytet: 2
Task3Priorytet: 3

为什么换行符在我意想不到的地方,以及我怎么才能在列表框中达到预期的输出。

ListBox中具有绑定数据的新行

<DataTemplate>
    <StackPanel Orientation="Vertical">
      <TextBlock Text="{Binding title}" />
      <StackPanel Orientation="Horizontal">                         
         <TextBlock Text="Priorytet: " />
         <TextBlock Text="{Binding priority}" />
      </StackPanel>
    </StackPanel>
</DataTemplate>

换行符只能在一个TextBlock内工作,不能在两个TextBlock之间工作。

您可以在垂直StackPanel 中放置2个TextBlocks

<StackPanel>
    <TextBlock Text="{Binding title}" />
    <TextBlock Text="{Binding priority, StringFormat='Priorytet: {0}'}"  />
</StackPanel>

也可以使用一个StringFormat 来代替priority的2个TextBlocks

如果文本在同一个TextBlock中,则Environment.NewLine仅具有预期效果
然后,WPF在考虑新行的情况下呈现TextBlockText属性,这将导致换行。

为了实现所需的行为,您必须添加一个垂直布局元素:

<ListBox Name="lbxListaZadan">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel xml:space="preserve" Orientation="Vertical">
                <TextBlock Text="{Binding title}" />
                <StackPanel Orientation="horizontal">
                    <TextBlock Text="Priorytet: " />
                    <TextBlock Text="{Binding priority}" />
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>