1

我的 Silverlight 项目中有一个 ScrollViewer,其中包含带有内容的扩展器。VerticalScrollBarVisibility 设置为 Auto,Horizo​​ntalScrollBarVisibility 设置为 Disabled,因为它不需要。问题是当我展开一个或多个扩展器以使垂直滚动条可见时,它会将扩展器内的内容稍微向左推。当(垂直)滚动条出现它不会将扩展器/内容推到左侧时,我该如何做到这一点?

我无法上传图片,因此将扩展示例上传到 TinyPic:

http://i42.tinypic.com/xvamd.png

示例代码可在http://pastebin.com/khPR8nPF

谢谢!

4

1 回答 1

2

您可以执行以下操作:

<ScrollViewer Name="scrollViewer1"
              Grid.Row="1"
              Grid.ColumnSpan="2"
              VerticalAlignment="Stretch"
              VerticalContentAlignment="Stretch"
              BorderBrush="{x:Null}"
              VerticalScrollBarVisibility="Auto">
  <!-- New Bit -->
  <ScrollViewer.Style>
    <Style TargetType="{x:Type ScrollViewer}">
      <Style.Resources>
        <Thickness x:Key="InvisScrollBarDimension"
                    Bottom="0"
                    Left="0"
                    Right="{StaticResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"
                    Top="0" />
      </Style.Resources>
      <Setter Property="Margin"
              Value="{StaticResource InvisScrollBarDimension}" />
      <Style.Triggers>
        <Trigger Property="ComputedVerticalScrollBarVisibility"
                  Value="Visible">
          <Setter Property="Margin"
                  Value="0" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </ScrollViewer.Style>
  ...

概念几乎是在不可见时根据系统参数赋予ScrollViewer权限, for帮助我们确定并在可见时将其重置为 0 。MarginVerticalScrollBarWidthKeyScrollbarTriggerComputedVerticalScrollBarVisibilityScrollbar

这应该在运行时产生无抖动效果。

于 2013-06-05T09:30:25.337 回答