Non penso che sarà possibile utilizzare uno storyboard WPF per l'animazione perché gli storyboard animano le proprietà di dipendenza WPF. Dovrai chiamare lo ScrollViewer.ScrollToHorizontalOffset(double)
per scorrere.
Si potrebbe provare a creare una proprietà di dipendenza personalizzata che chiama SetHorizontalOffset nella funzione OnDependencyPropertyChanged(). Quindi puoi animare questa proprietà.
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);
}
Per ottenere lo spettatore di scorrimento è possibile utilizzare il VisualTreeHelper per cercare i bambini visive del ListBox. Salva un riferimento a ScrollViewer perché ne avrai bisogno in seguito. Prova questo:
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;
}
Questa funzione restituisce il primo figlio visivo del tipo di parametro. Chiama il numero FindVisualChild<ScrollViewer>(ListBox)
per ottenere ScrollViewer.
Infine, provare a utilizzare UIElement.TranslatePoint(Point, UIElement)
per ottenere la posizione X dell'oggetto. Chiama questa funzione sull'oggetto, passa 0,0 per il punto e passa in ScrollViewer.
Spero che questo aiuti.
fonte
2009-03-20 11:45:45
Mio Dio, è proprio un lavoro! Grazie per l'aiuto Josh, mi ha indicato nella giusta direzione almeno. – Stimul8d
Intendi ScrollToHorizontalOffset invece di SetHorizontalOffset? –
Sì, hai ragione. Grazie! –