【问题标题】:Controlling ScrollViewer's vertical scrollbar height控制 ScrollViewer 的垂直滚动条高度
【发布时间】:2012-09-12 13:41:13
【问题描述】:

我需要使垂直滚动条稍微低一点(更短),因为我需要一个小按钮的空间。该按钮将悬停在右上角的 ScrollViewer 上。我想避免将滚动条从 ScrollViewer 中分离出来,只是为了在那里添加我的按钮。

这是一个标准的 WPF ScrollViewer,带有

 <ScrollViewer Name="Scroller" CanContentScroll="True" VerticalScrollBarVisibility="Auto"  Height="{Binding ElementName=OuterContainer, Path=ActualHeight}" Width="{Binding ElementName=OuterContainer, Path=ActualWidth}">
            <Grid Name="Container" Margin="5,5,5,5"> 
            </Grid>
</ScrollViewer>

有什么方法可以设置样式(或 C# 代码)一些 hack,以释放垂直滚动条上方的一些空间(我猜应该是上边距)?

【问题讨论】:

  • 哪个垂直滚动条?也许您应该发布一些 Xaml。
  • 添加了 XAML。它是默认的 WPF ScrollViewer。
  • 我怀疑完全打破滚动条的唯一选择是重新模板滚动查看器。

标签: wpf size scrollviewer vertical-scrolling


【解决方案1】:

我会更改 ScrollViewers 样式。根据MSDN库http://msdn.microsoft.com/en-us/library/aa970847.aspx默认样式是

<Style x:Key="LeftScrollViewer"
   TargetType="{x:Type ScrollViewer}">
  <Setter Property="OverridesDefaultStyle"
      Value="True" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ScrollViewer}">
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition />
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
          </Grid.RowDefinitions>
          <Border Grid.Column="1"
                BorderThickness="0,1,1,1">
            <Border.BorderBrush>
              <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
            </Border.BorderBrush>
            <ScrollContentPresenter />
          </Border>
          <ScrollBar x:Name="PART_VerticalScrollBar"
                   Value="{TemplateBinding VerticalOffset}"
                   Maximum="{TemplateBinding ScrollableHeight}"
                   ViewportSize="{TemplateBinding ViewportHeight}"
                   Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
          <ScrollBar x:Name="PART_HorizontalScrollBar"
                   Orientation="Horizontal"
                   Grid.Row="1"
                   Grid.Column="1"
                   Value="{TemplateBinding HorizontalOffset}"
                   Maximum="{TemplateBinding ScrollableWidth}"
                   ViewportSize="{TemplateBinding ViewportWidth}"
                   Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

所以你可以将垂直滚动条替换为

<ScrollBar x:Name="PART_VerticalScrollBar"
                   Value="{TemplateBinding VerticalOffset}"
                   Maximum="{TemplateBinding ScrollableHeight}"
                   ViewportSize="{TemplateBinding ViewportHeight}"
                   Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                     **Margin="0,12,0,0"**/>

【讨论】:

  • 谢谢,我重新设置了所有滚动条的样式,对于需要填充的滚动条,我设置了:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2012-02-26
相关资源
最近更新 更多