0

我有一个带有图像的水平 StackPanel 和另一个 StackPanel。内部 StackPanel 是垂直的,有两个 TextBlock,它们都将 TextWrapping 设置为 Wrap。但是,当文本变宽时,内部 StackPanel 的宽度会增加,因此 TextBlocks 不会换行。外部的 StackPanel 保留在它所提供的网格布局空间中。如何使内部 StackPanel 保持在外部 StackPanel 的范围内?

这是 XAML 的相关部分:

    <StackPanel Name="_imageAndNameStackPanel"
               Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" 
               Orientation="Horizontal"  Margin="12,12,12,0">
        <Image Name="_applicationImage" Source="{Binding Path=ImageUri}" 
               Stretch="Fill" Height="64" Width="64" HorizontalAlignment="Left"
               VerticalAlignment="Top" Margin="0,0,12,0" />
        <StackPanel Name="_nameStackPanel">
            <TextBlock Name="_nameTextBlock" Text="{Binding Path=AppName}" 
                 FontSize="24" VerticalAlignment="Top" TextWrapping="Wrap"/>
            <TextBlock Name="_subtitleTextBlock" Text="{Binding Path=Subtitle"
                 FontSize="18" VerticalAlignment="Top" Margin="0,6,0,0" 
                 TextWrapping="Wrap"/>
        </StackPanel>
    </StackPanel>
4

3 回答 3

4

你可能最好用 aDockPanel而不是StackPanel.

<StackPanel Name="_imageAndNameStackPanel"
           Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" 
           Orientation="Horizontal"  Margin="12,12,12,0">
    <Image Name="_applicationImage" Source="{Binding Path=ImageUri}" 
           Stretch="Fill" Height="64" Width="64" HorizontalAlignment="Left"
           VerticalAlignment="Top" Margin="0,0,12,0" />
    <DockPanel Name="_nameStackPanel">
        <TextBlock Name="_nameTextBlock" Text="{Binding Path=AppName}" 
             FontSize="24" VerticalAlignment="Top" TextWrapping="Wrap" 
             DockPanel.Dock="Top" />
        <TextBlock Name="_subtitleTextBlock" Text="{Binding Path=Subtitle"
             FontSize="18" VerticalAlignment="Top" Margin="0,6,0,0" 
             TextWrapping="Wrap" DockPanel.Dock="Top"/>
    </DockPanel>
</StackPanel>

最近我发现我开始的 3 次中有 2 次StackPanel最终将其更改为DockPanel.

但是……您确定外部StackPanel没有超出其网格单元的范围吗?您可能还想将其设为 a ,同时具有DockPaneltheImage和 inner 。DockPanelDockPanel.Dock="Left"

于 2010-08-06T18:22:55.093 回答
0

您可以将内部 StackPanel 的宽度绑定到父 StackPanel 的宽度。就像是:

{Binding RelativeSource={RelativeSource AncestorType={x:Type StackPanel}}, Path=Width}

于 2010-08-06T18:23:11.007 回答
-1

给你的内部堆栈面板或文本块一个固定的宽度。

于 2010-08-06T18:16:14.680 回答