XAML TextBlock:如何使 TextBlock 具有可变高度?

use*_*676 1 wpf xaml listbox textblock

我有一个包含 TextBlocks 的 ListBox。

有时 TextBlock 的内容太长,我希望此条目的高度根据需要增加一倍或三倍以容纳文本。

我试过 TextWrapping="Wrap" 但它不起作用。每个 TextBlock 仍然只有一行高度。

有没有一种简单的方法可以解决 XAML 中的问题?谢谢。

*附加信息:我试图简化问题,但也许完整的场景更好。

  1. 我有一个列表框,其条目根据下面代码中的模板显示。
  2. 每个条目有 2 条信息:产品价格后跟产品名称。
  3. 我不想在列表框中使用水平滚动条,并希望在必要时以 2 行或更多行显示产品名称。产品名称是第二个 TextBlock。

这是我的 XAML:

<ListBox Name="listBox1" ItemsSource="{Binding}" Margin="10" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock MinWidth="40"  TextAlignment="Right" Text = "{Binding ProductPrice}" />


                    <TextBlock Text = "{Binding ProductName}" TextWrapping="Wrap" />

                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>
Run Code Online (Sandbox Code Playgroud)

Mic*_*elS 5

禁用列表框水平scrollViewer。这种方式textBlock将被迫换行。

XAML:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
      <TextBlock TextWrapping="Wrap"/>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

结果示例:

在此处输入图片说明

编辑:

从您添加的 XAML 中,我相信问题出在StackPanel. 尝试将其替换Grid为例如:

    <ListBox Name="listBox1" ItemsSource="{Binding}" Margin="10" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemTemplate>
                <DataTemplate>
                   <Grid>
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="*"/>
                         <ColumnDefinition Width="*"/>
                     </Grid.ColumnDefinitions>
                        <TextBlock MinWidth="40"  TextAlignment="Right" Text = "{Binding ProductPrice}" />


                        <TextBlock Grid.Column="1" Text = "{Binding ProductName}" TextWrapping="Wrap" />

                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>

        </ListBox>
Run Code Online (Sandbox Code Playgroud)

StackPanel不限制内容大小,因此textBlock不知道空间在哪里结束,并且不会发生换行。