ItemsRepeaterPage.xaml.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Avalonia.Controls;
  6. using Avalonia.Controls.Primitives;
  7. using Avalonia.Controls.Repeaters;
  8. using Avalonia.Markup.Xaml;
  9. namespace ControlCatalog.Pages
  10. {
  11. public class ItemsRepeaterPage : UserControl
  12. {
  13. private ItemsRepeater _repeater;
  14. private ScrollViewer _scroller;
  15. public ItemsRepeaterPage()
  16. {
  17. this.InitializeComponent();
  18. _repeater = this.FindControl<ItemsRepeater>("repeater");
  19. _scroller = this.FindControl<ScrollViewer>("scroller");
  20. DataContext = Enumerable.Range(1, 100000).Select(i => $"Item {i}" ).ToArray();
  21. }
  22. private void InitializeComponent()
  23. {
  24. AvaloniaXamlLoader.Load(this);
  25. }
  26. private void LayoutChanged(object sender, SelectionChangedEventArgs e)
  27. {
  28. if (_repeater == null)
  29. {
  30. return;
  31. }
  32. var comboBox = (ComboBox)sender;
  33. switch (comboBox.SelectedIndex)
  34. {
  35. case 0:
  36. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  37. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  38. _repeater.Layout = new StackLayout { Orientation = Orientation.Vertical };
  39. break;
  40. case 1:
  41. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  42. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  43. _repeater.Layout = new StackLayout { Orientation = Orientation.Horizontal };
  44. break;
  45. case 2:
  46. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  47. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
  48. _repeater.Layout = new UniformGridLayout
  49. {
  50. Orientation = Orientation.Vertical,
  51. MinItemWidth = 200,
  52. MinItemHeight = 200,
  53. };
  54. break;
  55. case 3:
  56. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
  57. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  58. _repeater.Layout = new UniformGridLayout
  59. {
  60. Orientation = Orientation.Horizontal,
  61. MinItemWidth = 200,
  62. MinItemHeight = 200,
  63. };
  64. break;
  65. }
  66. }
  67. }
  68. }