No creo que pueda usar un guión gráfico WPF para la animación porque los guiones gráficos animan las propiedades de dependencia de WPF. Tendrá que llamar al ScrollViewer.ScrollToHorizontalOffset(double)
para desplazarse.
Puede intentar crear una propiedad de dependencia personalizada que llame a SetHorizontalOffset en la función OnDependencyPropertyChanged(). Entonces podrías animar esta propiedad.
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);
}
Para obtener el visor de desplazamiento se puede utilizar el VisualTreeHelper a buscar a los niños visuales del cuadro de lista. Guarde una referencia al ScrollViewer porque lo necesitará más adelante. Pruebe esto:
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;
}
Esta función devuelve el primer elemento secundario visual del tipo de parámetro. Llame al FindVisualChild<ScrollViewer>(ListBox)
para obtener el ScrollViewer.
Por último, intente utilizar UIElement.TranslatePoint(Point, UIElement)
para obtener la posición X del artículo. Llame a esta función en el artículo, pase 0,0 para el punto y pase el ScrollViewer.
Espero que esto ayude.
Mi Señor, ¡eso es un trabajo! Gracias por la ayuda, Josh, me ha señalado al menos en la dirección correcta. – Stimul8d
¿Quiere decir ScrollToHorizontalOffset en lugar de SetHorizontalOffset? –
Sí, tienes razón. ¡Gracias! –