C# ListView滚动条弄乱了我的布局

C# ListView滚动条弄乱了我的布局,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我有一个WPF列表框,通常显示4或5项。对于我的应用程序来说,这意味着我几乎不必显示滚动条(有足够的空间) 但是,如果列表中有更多的项目,我需要显示垂直滚动条,但结果是我的内容空间变小了,在我在列表框后面创建的“背景”上不再好看 我喜欢在我的布局中为滚动条的出现“预留”空间。有办法吗?(可能将滚动条覆盖在内容上)用ScrollViewr包装它怎么样 <ScrollViewer VerticalScrollBarVisibility="Auto"> <!-- your ListB

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

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


我喜欢在我的布局中为滚动条的出现“预留”空间。有办法吗?(可能将滚动条覆盖在内容上)

用ScrollViewr包装它怎么样

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

好的,找到了解决方案

我已经为ScrollViewer创建了一个新的默认样式。然后我改变了滚动条的位置

原始行为


新行为



现在滚动条覆盖在内容上,因此在可见时不会占用额外的空间。当然,内容现在应该为内容保留空间。

正如您在问题中所说的,您只需要为垂直滚动条保留宽度,下面的XAML代码会让您有所了解

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

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


这并不能解决我的问题,滚动条仍然占据了空间。其缺点是滚动条会出现在内容的顶部,并且可能会遮住部分内容。
<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>
<ScrollViewer VerticalScrollBarVisibility="Auto">
    <Grid> 
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="30"/> <!-- reserved for the vertical scrollbar -->
        </Grid.ColumnDefinitions>

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