2011-11-15 37 views
2

我正在使用WPF應用程序,並使用scrollViewer查看屏幕區域不受限制的內容。工作正常,沒有問題。WPF中的ScrollViewer出現問題

但是,如果我的窗口包含一個列表框或網格或類似的東西,並且該控件有很多記錄,那麼不是向它自己添加一個滾動條,而只是增加控件和窗口本身的高度,因爲scrollviewer認爲它需要擴展。

我不想硬編碼列表框的高度,因爲這使得它在不同的分辨率下是相同的,我想讓它增加高度,但並不總是像scrollviewer這樣做。

由於

回答

5

不能包括ScrollViewer內可變的高度/寬度對象而不設置觀看者的高度/寬度。

滾動查看器有效地具有無限高度,因此網格擴展填充「可用」空間 - 因此您看到的效果。正如@JoeWhite在他的評論中所說,ScrollViewer是一個容器,它可以像保存所有內容一樣高。錨定不會起作用 - 實際上,你的錨點已經被錨定,它只是固定在一些說「哦,我會成爲你需要的任何大小」的東西。

您需要限制高度,將ListBox移動到ScrollViewer之外或使用ScrollViewer以外的其他東西。

再次引用@Joe「這是在另一個滾動區域內放置滾動區域的危險 - 它的可用性差,很難定義行爲。」

+0

謝謝,做我們喜歡在WPF的窗口形式錨固性什麼嗎? –

+2

@MSingh,你把它放在ScrollViewer裏面。 ScrollViewer是一個容器,它可以像保存所有內容一樣高。錨定不會有幫助 - 實際上,您的ListBox已經*被錨定,它只是錨定在某些說「哦,我會是你需要我的任何大小」的東西。這是在另一個滾動區域內放置滾動區域的危險 - 可用性差,很難定義行爲。 –

+3

每次我必須處理ScrollViewer時,我知道這將是糟糕的一天。 :) – MetalMikester

1

可以將ScrollViewer包裝到網格中,並將scrollviewer的寬度和高度屬性綁定到網格的ActualWidth和ActualHeight。因此,scrollviewer的固定大小等於窗口大小時將改變的大小。

例子:

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid Background="#FFF1F1F1" Height="49" VerticalAlignment="Top"> 
     <Button Content="Обзор" Margin="0,13,175.25,0" VerticalAlignment="Top" FontSize="14.667" HorizontalAlignment="Right" Width="95.147"> 
     </Button> 
     <Label Content="{Binding DocPath, Converter={StaticResource FileNameConverter}, FallbackValue=Выберите файл, TargetNullValue=Выберите файл}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="342.603" Margin="10,10,0,0" Height="33"/> 
     <Button Content="Загрузить данные" HorizontalAlignment="Right" Margin="0,13,10,0" VerticalAlignment="Top" Width="151.147" FontSize="14.667"> 
     </Button> 
    </Grid> 
    <Grid x:Name="scrollBorder" Margin="10,54,10,10"> 
     <ScrollViewer x:Name="LogScroller" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
         HorizontalAlignment="Left" VerticalAlignment="Top" 
         Height="{Binding ActualHeight, ElementName=scrollBorder}" Width="{Binding ActualWidth, ElementName=scrollBorder}" > 
      <ItemsControl ItemsSource="{Binding Log}" /> 
     </ScrollViewer> 
    </Grid> 
</Grid>