首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XAML TextBlock:如何使TextBlock具有可变的高度?

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

Stack Overflow用户
提问于 2011-10-13 20:09:39
回答 3查看 5.4K关注 0票数 1

我有一个包含ListBox的TextBlocks。

有时,TextBlock的内容太长,我希望这个条目的高度达到双倍或三倍,以适应文本。

我试过TextWrapping="Wrap“,但它不起作用。每一个TextBlock仍然只是一条线的高度。

有什么简单的方法可以解决XAML中的问题吗?谢谢。

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

  1. I有一个列表框,其条目按照下面代码中的模板显示。
  2. 每个条目包含2条信息:产品价格和产品名称。
  3. 我不想使用列表框中的水平滚动条,如果需要,希望将产品名称显示在2行或更多行中。产品名称为第二代TextBlock.

这是我的XAML:

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-13 21:24:24

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

代码语言:javascript
复制
<DockPanel>
 <TextBlock  DockPanel.Dock="Left" MinWidth ="40"  TextAlignment="Right" Text = "11.12" />
 <TextBlock Text = "{Binding LongText}" DockPanel.Dock="Right" TextWrapping="Wrap" />
</DockPanel>

例如,

票数 1
EN

Stack Overflow用户

发布于 2011-10-13 20:22:28

禁用列表框水平scrollViewer。这样,textBlock将被迫包装。

XAML:

代码语言:javascript
复制
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
      <TextBlock TextWrapping="Wrap"/>
</ListBox>

举例结果:

编辑:

从XAML中,您还补充说,我确信问题在StackPanel中。例如,尝试用Grid替换它:

代码语言:javascript
复制
    <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不知道空格结束的位置,包装也不会发生。

票数 5
EN

Stack Overflow用户

发布于 2011-10-13 20:12:59

这能帮你做到这一点。不要调整TextBlock的大小,只需调整滚动查看器的大小,因为文本块需要是可变的,所以一旦超出ScrollViewer大小,ScrollViewer就会应用Scrollbar

代码语言:javascript
复制
<ScrollViewer HorizontalScrollBarVisibility="Auto" 
     VerticalScrollBarVisibility="Auto">
  <TextBlock/>
 </ScrollViewer>

对于ListBoxItem

代码语言:javascript
复制
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.Items>
            <TextBlock Text="{Binding LongText}" TextWrapping="Wrap"/>
        </ListBox.Items>
    </ListBox>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7759859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档