带扩展器的ScrollViewer

时间:2013-06-05 09:01:13

标签: c# .net wpf silverlight

我的Silverlight项目中有一个ScrollViewer,它包含带内容的扩展器。 VerticalScrollBarVisibility设置为Auto和 Horizo​​ntalScrollBarVisibility设置为Disabled,因为它不需要。 问题是当我展开一个或多个扩展器以便可以看到垂直滚动条时,它会将扩展器内的内容略微向左推。 当(垂直)滚动条出现时,如果它没有将扩展器/内容推向左侧,我怎么能这样做呢?

我无法上传图片,所以上传的扩展示例到TinyPic:

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

http://pastebin.com/khPR8nPF

提供的示例代码

谢谢!

1 个答案:

答案 0 :(得分: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基于系统参数Margin,当VerticalScrollBarWidthKey不可见Scrollbar Trigger时,概念就会给ComputedVerticalScrollBarVisibility一个权利Scrollbar当{{1}}可见时,1}}帮助我们确定并将其重置为0.

这应该在运行时给出无抖动效果。