Silverlight 3缺少ScrollViewer.ScrollChanged事件解决方法?

时间:2009-11-19 10:41:49

标签: silverlight scrollbar scrollviewer

我希望收到有关ScrollViewer垂直滚动条的VerticalOffset更改的通知。在WPF中有一个ScrollViewer.ScrollChanged事件,但在Silverlight 3中缺少这个事件。有没有人知道解决方法?

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