我有一个UserControl,其中有几个按钮和一些Textblock。由于某些原因,TextWrap不适用于此Textblock。
<StackPanel Grid.Column="0" Margin="0 0 0 10">
<TextBlock FontWeight="DemiBold" Text="Account closure" x:Name="Message"
Margin="0 6 0 2"
FontSize="18" />
<StackPanel Orientation="Horizontal" >
<TextBlock Text="A random text here, here, here "
Margin="0 6 0 0"
FontSize="18" />
<TextBlock Text="AZEQSD"
Margin="0 6 0 0"
TextWrapping="Wrap" FontWeight="DemiBold" FontSize="18" />
</StackPanel>
</StackPanel>
输出(选定的部分=第二个StackPanel),而我用鼠标的部分=第二个文本块,TextWrapping属性设置为Wrap。
在这里看到
答案 0 :(得分:4)
StackPanel
的大小适合其内容,除非实际指定了大小。因此,在“基本”情况下,自动换行不如您显示的那样起作用。
“主” TextBlock
中的StackPanel
将具有包装功能,因为使用Grid.Column
会限制其宽度。嵌套的StackPanel
没有这种限制。最简单的方法是将第二个堆叠面板放置在主网格中(第1行,第0列),以便对其进行约束。尽管还有很多其他可能性。
答案 1 :(得分:3)
DockPanel在这种情况下可以更好地进行调整:
<StackPanel Grid.Column="0" Margin="0 0 0 10">
<TextBlock FontWeight="DemiBold" Text="Account closure" x:Name="Message"
Margin="0 6 0 2"
FontSize="18" />
<DockPanel>
<TextBlock DockPanel.Dock="Left" Text="A random text here, here, here "
Margin="0 6 0 0"
FontSize="18" />
<TextBlock Text="AZEQSD"
Margin="0 6 0 0"
TextWrapping="Wrap" FontWeight="DemiBold" FontSize="18" />
</DockPanel>
</StackPanel>
编辑:
引用BradleyDotNET的评论:
之所以可行,是因为
DockPanel
会将最后一个孩子限制在 剩余空间,并填充其容器,即堆叠面板 仅限于网格。
Edit2:
您可以使用WrapPanel将第二个文本块全部换行到下一行:
<StackPanel Grid.Column="0" Margin="0 0 0 10">
<TextBlock FontWeight="DemiBold" Text="Account closure" x:Name="Message"
Margin="0 6 0 2"
FontSize="18" />
<WrapPanel>
<TextBlock DockPanel.Dock="Left" Text="A random text here, here, here "
Margin="0 6 0 0"
FontSize="18" />
<TextBlock Text="AZEQSD"
Margin="0 6 0 0"
TextWrapping="Wrap" FontWeight="DemiBold" FontSize="18" />
</WrapPanel>
</StackPanel>