ListBox 中包含绑定数据的新行

New line in ListBox with bound data

我正在使用以下简单代码将对象列表中的数据放入 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

为什么换行符出现在我不希望出现的地方,我到底怎么才能在列表框中达到预期的输出。

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

换行符只能在单个 TextBlock 内使用,不能在两个 TextBlock 之间使用。

你可以把 2 TextBlocks 放在垂直 StackPanel

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