В Silverlight 3 отсутствует метод обхода события ScrollViewer.ScrollChanged? - PullRequest
9 голосов
/ 19 ноября 2009

Я хочу получать уведомления об изменениях в VerticalOffset вертикальной полосы прокрутки ScrollViewer. В WPF есть событие ScrollViewer.ScrollChanged, но в Silverlight 3 это отсутствует. Кто-нибудь знает обходной путь?

Ответы [ 3 ]

6 голосов
/ 19 ноября 2009

Вы можете использовать привязку элемента, вот пример с ошибкой: -

<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 свойство Text в TextBox сообщается о новом значении.

3 голосов
/ 25 мая 2010

На форумах 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)
{

}
1 голос
/ 14 сентября 2010

вот хорошая ссылка, которую я нашел во время поиска в Google, также есть пример кода, который я еще не проверил.

http://dotplusnet.blogspot.com/2010/05/scrollviewer-scroll-change-event-in.html

...