2010-09-04 79 views
2

我需要你的幫助! :-)嵌套列表框大小問題

看看這個代碼示例:

<ListBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="500"> 
     <ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300" BorderBrush="Red" BorderThickness="5"> 
      <ListBox.Items> 
       <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300" SizeChanged="OnInnserItemSizeChanged"/> 
       <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/> 
       <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/> 
      </ListBox.Items> 
     </ListBox> 
     <ListBox x:Name="Item2" BorderBrush="Green" BorderThickness="5" Width="300" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
      <ListBox.Items> 
       <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/> 
       <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/> 
       <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/> 
      </ListBox.Items> 
     </ListBox>    
    </ListBox> 

現在,當我運行它,然後單擊「Enter」鍵在RichTextBoxes之一/「返回」,外部列表框項目(例如X: NAME =項目1)延伸,以匹配新的大小 - 但是當我刪除新添加的行不會調整回原來的大小...

感謝名單, 吉利

回答

4

這是由的方式造成VirtualizingStackPanel處理滾動,但我不知道原因在它後面。您可以防止它通過使用常規的StackPanel作爲ItemsPanel代替VirtualizingStackPanel:

<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
     Width="300" BorderBrush="Red" BorderThickness="5"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

或通過ScrollViewer.CanContentScroll設置爲False防止VirtualizingStackPanel從處理滾動:

<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
     Width="300" BorderBrush="Red" BorderThickness="5" 
     ScrollViewer.CanContentScroll="False"> 

注意,這樣做這些中的任何一個都會導致您在內部ListBox中失去虛擬化。在這種情況下,您還沒有充分利用這一點,因爲外部ListBox有一個ScrollViewer,它可以讓內部ListBox增長到所需的高度,這意味着它將始終顯示其所有行。