我希望收到有关ScrollViewer垂直滚动条的VerticalOffset更改的通知。在WPF中有一个ScrollViewer.ScrollChanged事件,但在Silverlight 3中缺少这个事件。有没有人知道解决方法?
答案 0 :(得分:6)
你可以使用元素绑定,这是一个愚蠢的例子: -
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="60" />
</Grid.RowDefinitions>
<ScrollViewer x:Name="ScrollSource">
<StackPanel>
<TextBlock>Hello</TextBlock>
<TextBlock>World</TextBlock>
<TextBlock>Yasso</TextBlock>
<TextBlock>Kosmos</TextBlock>
</StackPanel>
</ScrollViewer>
<TextBox Grid.Column="1" Text="{Binding VerticalOffset, ElementName=ScrollSource}" />
</Grid>
当滚动ScrollViewer
时,会告知TextBox的Text属性新值。
答案 1 :(得分:3)
Silverlight论坛上有一个更简单的解决方案:
protected override Size ArrangeOverride(Size finalSize)
{
// Assumes you only have one scrollviewer (e.g. fullscreen ScrollViewer)
var scrollbar = LayoutRoot.GetVisualDescendants()
.OfType<ScrollBar>()
.FirstOrDefault();
if (scrollbar != null)
scrollbar.Scroll += ScrollBarScroll;
return base.ArrangeOverride(finalSize);
}
private void ScrollBarScroll(object sender, ScrollEventArgs e)
{
}
答案 2 :(得分:1)
这是一个很好的链接,我在google搜索时发现,它也有一些我没有检查的示例代码。
http://dotplusnet.blogspot.com/2010/05/scrollviewer-scroll-change-event-in.html