我有一个包含TextBlocks的ListBox。
有时TextBlock的内容太长,我希望此条目的高度可以根据需要加倍或加倍以容纳文本。
我尝试过TextWrapping =“Wrap”,但它不起作用。每个TextBlock仍然只有一行高。
有没有一种简单的方法可以解决XAML中的问题?感谢。
* 其他信息:我试图简化问题,但也许完整的方案更好。
这是我的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>
答案 0 :(得分:3)
禁用列表框水平scrollViewer
。这样textBlock
将被强制换行。
XAML:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<TextBlock TextWrapping="Wrap"/>
</ListBox>
示例结果:
修改强>
从你添加的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>
例如: