2016-08-31 408 views
-1

我有一個WrapPanel,一個按鈕和另一個WrapPanel內的兩個元素。該按鈕具有動態寬度。問題是子WrapPanel假定父WrapPanel的全部寬度,由於其左邊的按鈕而溢出到右邊。WrapPanel孩子採取父母的全寬

WrapPanel overflowing

<WrapPanel Height="200" VerticalAlignment="Top" Orientation="Vertical"> 
     <Button x:Name="BookCover" Click="ChangeImageFile" Margin="10"> 
      button style and content 
     </Button> 
     <WrapPanel Margin="10"> 
      <TextBox Text="New Book"></TextBox> 
      <TextBox Text="Lorem ipsum dolor sit amet, eos iusto graece consetetur cu, an dicam nonumy volutpat qui, usu at nullam alienum. Est suas autem augue ad, integre vituperatoribus quo id, delicata gloriatur pro ei. Vel at nisl decore, ut eum altera commune. Nec at agam menandri, putant insolens suavitate ei mei, ea possim veritus mea. Nec nemore iuvaret detracto at, quodsi consectetuer pri id. Integre suscipit voluptua no pro, nonumes incorrupte ut mea. Delenit democritum vel in, quem tale everti vim id, id vis melius necessitatibus. Paulo signiferumque per te. Cu mei modus exerci partiendo, ad iudico adolescens mea, et stet integre civibus mea." TextWrapping="Wrap"></TextBox> 
     </WrapPanel> 
    </WrapPanel> 

我怎樣才能使它適合窗口裏面?

+0

爲什麼使用WrapPanel這個?你只需使用Grid即可。 – Bolu

回答

1

正如我在評論說,你應該使用Grid像好:

<Window ...> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> <!--to fit to the content--> 
      <ColumnDefinition Width="*"/> <!--fill all the remaining--> 
     </Grid.ColumnDefinitions> 
     <Button x:Name="BookCover" Click="ChangeImageFile" Margin="10"> 
      button style and content 
     </Button> 
     <StackPanel Grid.Column="1" Margin="10"> 
      <TextBox Text="New Book"></TextBox> 
      <TextBox Text="Lorem ipsum dolor sit amet, eos iusto graece consetetur cu, an dicam nonumy volutpat qui, usu at nullam alienum. Est suas autem augue ad, integre vituperatoribus quo id, delicata gloriatur pro ei. Vel at nisl decore, ut eum altera commune. Nec at agam menandri, putant insolens suavitate ei mei, ea possim veritus mea. Nec nemore iuvaret detracto at, quodsi consectetuer pri id. Integre suscipit voluptua no pro, nonumes incorrupte ut mea. Delenit democritum vel in, quem tale everti vim id, id vis melius necessitatibus. Paulo signiferumque per te. Cu mei modus exerci partiendo, ad iudico adolescens mea, et stet integre civibus mea." TextWrapping="Wrap"></TextBox> 
     </StackPanel> 
    </Grid>  
</Window> 

結果: result

+0

工作。使用網格列似乎比StackPanel更可行。 –

2

該問題可能是由Orientation="Vertical"造成的。 根據MSDN, 如果Orientation屬性設置爲Horizo​​ntal,則子內容首先形成水平行,如果需要則形成垂直堆棧行。如果「方向」屬性設置爲「垂直」,則子內容首先位於垂直列中,如果沒有足夠的空間,則會發生纏繞並添加水平尺寸中的其他列。

此處您已將方向設置爲垂直,並且未將默認寬度設置爲Wrappanel。這會導致問題。包裝垂直髮生並導致子內容移出可見區域。 要麼爲wrappanel定義一個常量寬度,要麼適合窗口寬度,如:Width="{Binding ElementName=Window, Path=Width}"或嘗試考慮刪除Orientation="Vertical"

編輯 我包括解決方案來解決您的問題。該方法是在內部父包裝中使用Grid,以將按鈕和內容之間的空間等分爲2個相等的列。檢查這是否有幫助。

<WrapPanel Height="200" 
      VerticalAlignment="Top" 
      Orientation="Vertical"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Button x:Name="BookCover" 
       Grid.Column="0" 
       Margin="10" 
       Click="ChangeImageFile"> 
      button style and content 
     </Button> 
     <WrapPanel Grid.Column="1" Margin="10"> 
      <TextBox Text="New Book" /> 
      <TextBox Text="Lorem ipsum dolor sit amet, eos iusto graece consetetur cu, an dicam nonumy volutpat qui, usu at nullam alienum. Est suas autem augue ad, integre vituperatoribus quo id, delicata gloriatur pro ei. Vel at nisl decore, ut eum altera commune. Nec at agam menandri, putant insolens suavitate ei mei, ea possim veritus mea. Nec nemore iuvaret detracto at, quodsi consectetuer pri id. Integre suscipit voluptua no pro, nonumes incorrupte ut mea. Delenit democritum vel in, quem tale everti vim id, id vis melius necessitatibus. Paulo signiferumque per te. Cu mei modus exerci partiendo, ad iudico adolescens mea, et stet integre civibus mea." TextWrapping="Wrap" /> 
     </WrapPanel> 
    </Grid> 
</WrapPanel> 
+0

如果方向不是水平的,則元素不會按照我希望的那樣對齊。感謝您指出問題。還沒有找到解決方案,雖然(恆定寬度不是一個選項) –

+0

@AndreiIlie,檢查我的答案。 – Bolu

+0

@AndreiIlie:Bolu建議,你可以嘗試使用網格。但是,網格無法提供您期望從與StackPanel **相同​​的WrapPanel,但它將元素相應地包裝爲表單的大小。如果表格大小發生變化,「換行面板」中的控件將自動移動到下一行**但使用網格會使事情變得更糟。東西是按鈕是父母的內部,其餘的內容是在孩子的內部。所以只使用按鈕後留下的空間。因此,最好指定一個最小寬度來實現你所需要的。 – ViVi