2010-08-06 105 views
0

我有一個水平的StackPanel與圖像和另一個StackPanel。內部StackPanel與兩個TextBlocks垂直,兩個TextBlocks都將TextWrapping設置爲Wrap。但是,當文本變寬時,內部StackPanel的寬度會增加,以便TextBlocks不會換行。外部的StackPanel與它給出的網格佈局空間保持一致。我如何使內層StackPanel保持在外層StackPanel的範圍內?WPF佈局問題與嵌套的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

您可能更喜歡DockPanel而不是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> 

最近我發現,2開出3次,我開始StackPanel我最終將其更改爲DockPanel

但是...你是當然StackPanel是不是擴大超出其網格單元格的邊界?您可能還希望製作一個DockPanelImage和內部DockPanelDockPanel.Dock="Left"

+0

我很確定外部堆棧面板沒有增長。當我在XAML中選擇該面板時,我可以在設計器中看到它的大小。 – 2010-08-06 18:34:35

+0

我已經測試過兩個底座面板,包裝正常工作。 – Scott 2010-08-06 18:45:39

-1

給你內心的StackPanel或文本塊是一個固定的寬度。

+0

我想的TextBlocks與對話框,他們在總寬度尺寸作爲備用,我可能會風這樣做。我希望有更多的活力。 – 2010-08-06 18:23:09

+1

然後,我會根據Jay的建議將兩個堆疊面板都更改爲停靠面板(或者使用單個網格,2列3行:一列用於跨越三行的圖像,然後在第二列中每行獲取一個文本塊除了最下面的一行是空的(假設這是你的目光))。 – Scott 2010-08-06 18:37:57

0

你可以將你的內層StackPanel的寬度綁定到Parent StackPanel的寬度。喜歡的東西:

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

+0

外層StackPanel具有水平方向,所以它必須是外層StackPanel的寬度減去圖像的寬度。 – Jay 2010-08-06 18:25:42