ScrollToItemIndexBehavior.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Reactive.Disposables;
  3. using Avalonia.Controls;
  4. namespace Avalonia.Xaml.Interactions.Custom;
  5. /// <summary>
  6. ///
  7. /// </summary>
  8. public class ScrollToItemIndexBehavior : AttachedToVisualTreeBehavior<ItemsControl>
  9. {
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. public static readonly StyledProperty<IObservable<int>?> ItemIndexProperty =
  14. AvaloniaProperty.Register<ScrollToItemIndexBehavior, IObservable<int>?>(nameof(ItemIndex));
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. public IObservable<int>? ItemIndex
  19. {
  20. get => GetValue(ItemIndexProperty);
  21. set => SetValue(ItemIndexProperty, value);
  22. }
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. /// <param name="disposables"></param>
  27. protected override void OnAttachedToVisualTree(CompositeDisposable disposables)
  28. {
  29. var disposable = ItemIndex?.Subscribe(index =>
  30. {
  31. AssociatedObject?.ScrollIntoView(index);
  32. });
  33. if (disposable is not null)
  34. {
  35. disposables.Add(disposable);
  36. }
  37. }
  38. }