ListView滚动条搞乱了我的布局

时间:2009-05-15 14:03:18

标签: c# .net wpf xaml

我有一个WPF ListBox,通常显示4或5个项目。对于我的应用程序,这意味着我几乎不必显示滚动条(有足够的空间)。

但是,如果列表中有更多项目,我需要显示垂直滚动条,但结果我的内容占用空间更少,并且在我后面创建的“背景”上看起来不再好看列表框。

我喜欢在我的布局中“保留”空间以显示滚动条。有没有办法做到这一点? (可能将滚动条覆盖在内容上)

3 个答案:

答案 0 :(得分:0)

用ScrollViewer包装它怎么样?

<ScrollViewer VerticalScrollBarVisibility="Auto">
<!-- your ListBoxHere -->           
</ScrollViewer>

答案 1 :(得分:0)

好的,找到了解决方案。

我已按照this MSDN article为ScrollViewer创建了一个新的默认样式。然后我改变了放置滚动条的部分。

原始行为

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="Auto"/>
  </Grid.RowDefinitions>
  <Border Grid.Row="0" Grid.Column="1">
    <ScrollContentPresenter CanContentScroll="True" Content="{TemplateBinding ScrollViewer.Content}" />
  </Border>
  <ScrollBar Orientation="Vertical" Grid.Row="0" Grid.Column="0" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" Value="{TemplateBinding ScrollViewer.VerticalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" />
  <ScrollBar Orientation="Horizontal" Grid.Row="1" Grid.Column="1" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" Value="{TemplateBinding ScrollViewer.HorizontalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}"/>
</Grid>

新行为

<Grid>
  <!-- Presentation below is different from the default: the scrollbar is overlayed on the content. -->
  <ScrollContentPresenter CanContentScroll="True" Content="{TemplateBinding ScrollViewer.Content}" />
  <ScrollBar Orientation="Vertical" HorizontalAlignment="Right" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" Value="{TemplateBinding ScrollViewer.VerticalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" />
  <ScrollBar Orientation="Horizontal" VerticalAlignment="Bottom" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" Value="{TemplateBinding ScrollViewer.HorizontalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}"/>
</Grid>

现在,滚动条会叠加在内容上,以便在可见时不会占用额外的空间。当然,内容现在应该为内容预留空间。

答案 2 :(得分:0)

正如您在问题中所说,您只需要保留垂直滚动条的宽度,遵循XAML代码会给您一些想法。

<ScrollViewer VerticalScrollBarVisibility="Auto">
    <Grid> 
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="30"/> <!-- reserved for the vertical scrollbar -->
        </Grid.ColumnDefinitions>

        <Listbox .../>
    </Grid>
</ScrollViewer>