Попытка программно прокрутить окно прокрутки

Я разрабатываю приложение WPF, в котором у меня есть ScrollViewer с сеткой (16 ColumnDefinitions с автоматической шириной) с изображением, назначенным каждому столбцу. Эффект, который я хочу создать, заключается в том, что когда мышь входит в область слева от ScrollViewer, изображения будут прокручиваться влево... и когда мышь входит в область справа от ScrollViewer, они прокручиваются вправо. Полосы прокрутки будут скрыты. Области слева и справа определяются двумя прямоугольниками с событиями mouseEnter и mouseLeave. В моем коде используется таймер для программной прокрутки ScrollViewer влево или вправо.

Вот мой код...

Imports System
Imports System.IO
Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Navigation


Partial Public Class Crime

    Dim ScrollLeft As Boolean = True
    Dim atimer As New System.Timers.Timer()

    Public Sub New()
        MyBase.New()

        Me.InitializeComponent()

        ' Insert code required on object creation below this point.

        ' Hook up the Elapsed event for the timer.
        AddHandler atimer.Elapsed, AddressOf Me.timer_Tick

        atimer.Interval = 100
        atimer.Enabled = True

    End Sub

    'CODE TO SCROLL SCROLLVIEWER PROGRAMATICALLY
    Private Sub timer_Tick(sender As Object, e As EventArgs)
        If ScrollLeft Then
            svImages.ScrollToHorizontalOffset(svImages.HorizontalOffset - 1)
        Else
            svImages.ScrollToHorizontalOffset(svImages.HorizontalOffset + 1)
        End If
    End Sub

    Private Sub Left_MouseEnter(sender As Object, e As MouseEventArgs)
        ScrollLeft = True
        atimer.Start()
    End Sub

    Private Sub Right_MouseEnter(sender As Object, e As MouseEventArgs)
        ScrollLeft = False
        atimer.Start()
    End Sub

    Private Sub Left_MouseLeave(sender As Object, e As MouseEventArgs)
        atimer.Stop()
        ScrollLeft = True
    End Sub

    Private Sub Right_MouseLeave(sender As Object, e As MouseEventArgs)
        atimer.Stop()
    End Sub

End Class

Если я запускаю это из Expressions Blend, проект строится нормально и отображается, но действие прокрутки не работает.

Если я запускаю это из Visual Studio, я получаю сообщение об ошибке со строкой...

svImages.ScrollToHorizontalOffset(svImages.HorizontalOffset - 0.1)

о том, что InvalidOperationException не было обработано пользовательским кодом... Вызывающий поток не может получить доступ к этому объекту, поскольку им владеет другой поток. Я получаю эту ошибку еще до загрузки окна.

Где я ошибся.

5
задан Mych 24 March 2012 в 11:59
поделиться