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

时间:2011-10-13 20:09:39

标签: wpf xaml listbox textblock

我有一个包含TextBlocks的ListBox。

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

我尝试过TextWrapping =“Wrap”,但它不起作用。每个TextBlock仍然只有一行高。

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

* 其他信息:我试图简化问题,但也许完整的方案更好。

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

3 个答案:

答案 0 :(得分:3)

禁用列表框水平scrollViewer。这样textBlock将被强制换行。

XAML:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
      <TextBlock TextWrapping="Wrap"/>
</ListBox>

示例结果:

enter image description here

修改

从你添加的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>

StackPanel不限制内容大小,因此textBlock不知道空格的结束位置,并且不会发生包装。

答案 1 :(得分:1)

这将有助于你做到这一点。不要调整TextBlock的大小,只需调整滚动查看器的大小,因为texblock需要变量,因此ScrollViewer一旦超出Scrollbar的大小,就会应用ScrollViewer

<ScrollViewer HorizontalScrollBarVisibility="Auto" 
     VerticalScrollBarVisibility="Auto">
  <TextBlock/>
 </ScrollViewer>

对于ListBoxItem

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.Items>
            <TextBlock Text="{Binding LongText}" TextWrapping="Wrap"/>
        </ListBox.Items>
    </ListBox>

答案 2 :(得分:1)

您正在使用StackPanel。尝试使用DockPanel

<DockPanel>
 <TextBlock  DockPanel.Dock="Left" MinWidth ="40"  TextAlignment="Right" Text = "11.12" />
 <TextBlock Text = "{Binding LongText}" DockPanel.Dock="Right" TextWrapping="Wrap" />
</DockPanel>

例如:

enter image description here