ListBox için kaydırmayı nasıl canlandırabilirim? ScrollIntoView uygulamasını kullanabileceğimi biliyorum, ancak bunu nasıl canlandırabilirim? Bir listBoxItem diğerine taşımak için ok tuşlarına basmak istiyorum.Kaydırma animasyonu
cevap
İşte VerticalOffset
mülkiyet salt okunur böylece yerine sırayla ScrollToVerticalOffset
yapar ScrollViewer
üzerine iliştirilmiş bir özellik VerticalOffset
kullanabileceğiniz aşağıdaki linke
http://aniscrollviewer.codeplex.com/
aynı yaklaşımına dayalı kaba bir uygulamasıdır. Bu ekli özellik animasyonlu olabilir.
AnimateScrollIntoView
adı verilen ItemsControl
için bir uzantı yöntemi de oluşturabilirsiniz. Bu
listBox.AnimateScrollIntoView(yourItem);
ScrollViewerBehavior
gibiÇağrı bunu
public class ScrollViewerBehavior
{
public static DependencyProperty VerticalOffsetProperty =
DependencyProperty.RegisterAttached("VerticalOffset",
typeof(double),
typeof(ScrollViewerBehavior),
new UIPropertyMetadata(0.0, OnVerticalOffsetChanged));
public static void SetVerticalOffset(FrameworkElement target, double value)
{
target.SetValue(VerticalOffsetProperty, value);
}
public static double GetVerticalOffset(FrameworkElement target)
{
return (double)target.GetValue(VerticalOffsetProperty);
}
private static void OnVerticalOffsetChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
ScrollViewer scrollViewer = target as ScrollViewer;
if (scrollViewer != null)
{
scrollViewer.ScrollToVerticalOffset((double)e.NewValue);
}
}
}
ItemsControlExtensions
public static class ItemsControlExtensions
{
public static void AnimateScrollIntoView(this ItemsControl itemsControl, object item)
{
ScrollViewer scrollViewer = VisualTreeHelpers.GetVisualChild<ScrollViewer>(itemsControl);
UIElement container = itemsControl.ItemContainerGenerator.ContainerFromItem(item) as UIElement;
int index = itemsControl.ItemContainerGenerator.IndexFromContainer(container);
double toValue = scrollViewer.ScrollableHeight * ((double)index/itemsControl.Items.Count);
Point relativePoint = container.TranslatePoint(new Point(0.0, 0.0), Window.GetWindow(container));
DoubleAnimation verticalAnimation = new DoubleAnimation();
verticalAnimation.From = scrollViewer.VerticalOffset;
verticalAnimation.To = toValue;
verticalAnimation.DecelerationRatio = .2;
verticalAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
Storyboard storyboard = new Storyboard();
storyboard.Children.Add(verticalAnimation);
Storyboard.SetTarget(verticalAnimation, scrollViewer);
Storyboard.SetTargetProperty(verticalAnimation, new PropertyPath(ScrollViewerBehavior.VerticalOffsetProperty));
storyboard.Begin();
}
}
Ve ayrıcabir tutun almak gerekir çünküsen .... bu
public static class VisualTreeHelpers
{
public static T GetVisualChild<T>(DependencyObject parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
}
Bu article belgesine bir bakın, animasyonun nasıl hareket edeceğini ve dokunma hareketlerini nasıl ekleyeceğini açıklar. Kaynağı sayfanın en altında indirin ve WpfScrollContent çözümüne bakın. WPF ListBox'u genişletirim ve kaydırma animasyonunu, kontrolü yeniden kullanabileceğiniz şekilde eklerdim.
kırık link gerekir – patrickbadley
yayınlanmıştır 2 yıl önce ... linkleri başka bir şey içermeyen cevaplar cesaretini neden tam da – evanb
@evanb. –
- 1. Köşeli 4 - Kaydırma Animasyonu
- 2. Programatik olarak kaydırma animasyonu nasıl yapılır
- 3. jQuery animasyonu geriye ve ileri kaydırma
- 4. Geri arama fonksiyonu ile jquery animasyonu kaydırma çalışmıyor
- 5. CSS animasyonu (iOS)
- 6. ScrollView ile Android döndürme animasyonu
- 7. AnimateWithDuration'a sıçrama animasyonu nasıl eklenir?
- 8. dalgalı animasyonu
- 9. UIWindow animasyonu
- 10. OpenGL animasyonu
- 11. kutu Yan menü için 3D animasyonu çevirin
- 12. pürüzsüz kaydırma/atalet kaydırma/momentum kaydırma
- 13. Kaydırma bölümleri rasgele kaydırma
- 14. Kaydırma
- 15. Silverlight animasyonu düzgün değil
- 16. jQuery Sekmesi Soldurma Animasyonu
- 17. Blackberry - düzeni animasyonu alanları
- 18. Android'de Görünüm'ün Patlama animasyonu
- 19. Belirli özelliklerin jquery animasyonu
- 20. CSS gradyan animasyonu
- 21. UIBarButtonItem animasyonu nasıl açılır?
- 22. CardView kapak animasyonu
- 23. angular2 geçiş animasyonu çalışmıyor
- 24. Sorunsuz arkaplan animasyonu
- 25. ReactCSSTransitionGroup animasyonu çalışmıyor
- 26. iPhone: vektör animasyonu
- 27. Sonsuz döngü animasyonu
- 28. Google Plus çini animasyonu
- 29. Android geçiş animasyonu çalışmıyor
- 30. A-frame animasyonu
Yatay olarak kaydırmak istersem, anim.to değeri ne olurdu? – Cobold
Kodda bir hata olabilir: 'scrollViewer.ScrollableHeight * ((çift) index/itemsControl.Items.Count); 'scrollViewer.ScrollableHeight * ((double) index/(itemsControl.Items.Count -1)); Liste 12 elementleri içerir ve ben sonuncusu (endeks 11) ilerleyin istiyorsanız ' örneğin, sonuç haline gelmeli ' scrollViewer.ScrollableHeight * 1' da, sıfıra bölme dikkat : – sim1
@ sim1: Uzun süredir buna bakmadığınızdan eminim ki haklısınız. Güncelleme için teşekkürler :) –