2012-01-09 21 views
0

我有一個ScrollViewer,它包含一個DockPanel,其中包含一個ListBox作爲其填充元素。我面臨的問題是,當ListBox包含很多項目,並且窗口的高度降低到需要滾動條的位置時,將出現ScrollViewer的滾動條,並將我的控件從DockPanel.Dock="Bottom"推離屏幕。 ListBox的滾動條從不出現。相反,當窗口高度減小時,我想首先出現ListBox的滾動條。然後,在ListBox縮小到我指定的最小高度後,ScrollViewer的滾動條應該會好好照顧其餘部分。如何在ScrollViewer中顯示ListBox滾動條?

怎麼辦?

+0

我沒有檢查這個時間,但我認爲你應該爲ListBox設置最小高度,然後使用轉換器將ListBox的實際高度綁定到ScrollViewer的實際高度,以使ScrollViewer的ScrollBar apear之前的ListBox實際高度縮小。然後,只有當ListBox縮小到其最小高度時,ScrollViewer的ScrollBar纔會出現。 希望它有效。 – Seffix 2012-01-09 05:19:26

+0

請看下面的答案。 – Seffix 2012-01-09 07:55:33

回答

1

您應該將ListView的MinHeight屬性設置爲您希望ScrollViewer的ScrollBar變爲或啓用的特定高度。 ListView的Height屬性應該綁定到ScrollViewer的Height屬性。然後,當窗口的高度降低到隱藏ListView中List的一部分的高度時,ListView的ScrollBar apears。當ListView的高度達到其MinHeight ScrollViewer的ScrollBar apears。

這是XAML代碼:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ScrollViewer VerticalScrollBarVisibility="Auto"> 
      <DockPanel> 
       <ListView x:Name="listView1" DockPanel.Dock="Bottom" MinHeight="100" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollViewer, AncestorLevel=1}, Path=ActualHeight}"/> 
      </DockPanel> 
     </ScrollViewer> 
    </Grid> 
</Window> 
+0

不幸的是,我不能這樣做。原因是DockPanel和ListView是UserControl的一部分,所以他們不能引用ScrollViewer(包含UserControl)。但是,即使我可以,我也認爲這不會起作用。它看起來會導致listview與scrollviewer的高度相同,這會將我的其他控件從屏幕上敲下來。 – 2012-01-09 14:35:41

+0

首先,它的工作,我檢查。 – Seffix 2012-01-09 15:49:50

+0

第二,您可以使用轉換器將高度調整到您想要的高度,以便計算爲其他控件留出足夠空間的確切高度。 – Seffix 2012-01-09 15:57:04