Animasyon için bir WPF hikaye panosu kullanabileceğinizi sanmıyorum çünkü storyboard'lar WPF bağımlılık özelliklerini canlandırıyor. Kaydırmak için ScrollViewer.ScrollToHorizontalOffset(double)
'u aramanız gerekecektir.
SetHorizontalOffset öğesini OnDependencyPropertyChanged() işlevinde çağıran özel bir bağımlılık özelliği oluşturmayı deneyebilirsiniz. Sonra bu özelliği canlandırabilirsin.
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);
}
kaydırma görüntüleyici ListBoxBindingContextChanged görsel çocukları aramak için VisualTreeHelper kullanabilirsiniz almak için. ScrollViewer'a bir referans kaydedin, çünkü daha sonra ihtiyacınız olacak. Bunu deneyin:
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;
}
Bu işlev, parametre türünün ilk görsel alt öğesini döndürür. ScrollViewer'ı almak için FindVisualChild<ScrollViewer>(ListBox)
numaralı telefonu arayın.
Son olarak, öğenin X konumunu almak için UIElement.TranslatePoint(Point, UIElement)
kullanmayı deneyin. Öğede bu işlevi çağırın, nokta için 0,0 değerini geçirin ve ScrollViewer'da iletin.
Bu yardımcı olur umarım.
Lordum, bu oldukça iş! Yardım için teşekkürler Josh, en azından doğru yönde bana işaret etti. – Stimul8d
Bunu mu demek istediniz: ScrollToHorizontalOffset yerine SetHorizontalOffset? –
Evet, haklısın. Teşekkürler! –