Не думаю, что вы сможете использовать раскадровку WPF для анимации, потому что раскадровки анимируют свойства зависимостей WPF. Вам нужно будет позвонить ScrollViewer.ScrollToHorizontalOffset(double)
для прокрутки.
Вы можете попробовать создать собственное свойство зависимостей, которое вызывает SetHorizontOffset в функции OnDependencyPropertyChanged (). Тогда вы можете анимировать это свойство.
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);
}
Чтобы получить средство просмотра прокрутки, вы можете использовать VisualTreeHelper для поиска визуальных потомков ListBox. Сохраните ссылку на ScrollViewer, потому что она понадобится вам позже. Попробуйте это:
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;
}
Эта функция возвращает первого визуального потомка типа параметра. Вызовите FindVisualChild<ScrollViewer>(ListBox)
, чтобы получить ScrollViewer.
Наконец, попробуйте использовать UIElement.TranslatePoint(Point, UIElement)
, чтобы получить позицию X элемента. Вызовите эту функцию для элемента, передайте 0,0 для точки и передайте ScrollViewer.
Надеюсь, это поможет.