ItemsRepeaterPage.xaml.cs 2.6 KB

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