StackPanel中的TextWrap

时间:2018-07-27 17:43:40

标签: c# wpf

我有一个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。

在这里看到

enter image description here

2 个答案:

答案 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>