带扩展器的ScrollViewer
本文关键字:ScrollViewer 扩展器 | 更新日期: 2023-09-27 18:17:04
我在我的Silverlight项目中有一个ScrollViewer,它包含有内容的扩展器。VerticalScrollBarVisibility设置为Auto和HorizontalScrollBarVisibility设置为Disabled,因为不需要。问题是,当我展开一个或多个展开器,使垂直滚动条可见时,它将展开器内的内容略微向左推。我怎么能做到这一点,当(垂直)滚动条出现,它不推动展开器/内容到左边?
我不能上传图片,所以上传扩展的例子到TinyPic:
http://i42.tinypic.com/xvamd.png示例代码可在http://pastebin.com/khPR8nPF
谢谢!
你可以这样做:
<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>
...
概念是当Scrollbar
不可见时,基于系统参数VerticalScrollBarWidthKey
给ScrollViewer
一个正确的Margin
, ComputedVerticalScrollBarVisibility
的Trigger
帮助我们确定并在Scrollbar
可见时将其重置为0。
这会在运行时产生无抖动效果。