Nie sądzę, że będzie można użyć scenariusza WPF do animacji, ponieważ storyboardy animują właściwości zależności WPF. Aby przewinąć, musisz zadzwonić pod numer ScrollViewer.ScrollToHorizontalOffset(double)
.
Można spróbować utworzyć niestandardową właściwość zależności, która wywołuje SetHorizontalOffset w funkcji OnDependencyPropertyChanged(). Następnie możesz animować tę właściwość.
public static readonly DependencyProperty ScrollOffsetProperty =
DependencyProperty.Register("ScrollOffset", typeof(double), typeof(YOUR_TYPE),
new FrameworkPropertyMetadata(0.0, new PropertyChangedCallback(OnScrollOffsetChanged)));
public double ScrollOffset
{
get { return (double)GetValue(ScrollOffsetProperty); }
set { SetValue(ScrollOffsetProperty, value); }
}
private static void OnScrollOffsetChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
YOUR_TYPE myObj = obj as YOUR_TYPE;
if (myObj != null)
myObj.SCROLL_VIEWER.ScrollToHorizontalOffset(myObj.ScrollOffset);
}
Aby uzyskać przeglądarkę przewijania, można użyć VisualTreeHelper do przeszukiwania wizualnych elementów podrzędnych obiektu ListBox. Zapisz odniesienie do ScrollViewer, ponieważ będziesz go potrzebować później. Spróbuj:
public static childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
// Iterate through all immediate children
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
return (childItem)child;
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
Ta funkcja zwraca pierwsze wizualne dziecko typu parametru. Zadzwoń pod numer FindVisualChild<ScrollViewer>(ListBox)
, aby uzyskać przeglądarkę ScrollViewer.
Na koniec spróbuj użyć UIElement.TranslatePoint(Point, UIElement)
, aby uzyskać pozycję X przedmiotu. Wywołaj tę funkcję na przedmiocie, podaj 0,0 punktu i przeprowadź w ScrollViewer.
Mam nadzieję, że to pomoże.
Mój panie, to niezła robota! Dzięki za pomoc, Josh, wskazał mi przynajmniej właściwy kierunek. – Stimul8d
Masz na myśli ScrollToHorizontalOffset zamiast SetHorizontalOffset? –
Tak, masz rację. Dzięki! –