ItemsRepeaterPage.xaml.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Linq;
  3. using Avalonia.Controls;
  4. using Avalonia.Controls.Primitives;
  5. using Avalonia.Input;
  6. using Avalonia.Layout;
  7. using Avalonia.Markup.Xaml;
  8. using ControlCatalog.ViewModels;
  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. _repeater.PointerPressed += RepeaterClick;
  21. DataContext = new ItemsRepeaterPageViewModel();
  22. }
  23. private void InitializeComponent()
  24. {
  25. AvaloniaXamlLoader.Load(this);
  26. }
  27. private void LayoutChanged(object sender, SelectionChangedEventArgs e)
  28. {
  29. if (_repeater == null)
  30. {
  31. return;
  32. }
  33. var comboBox = (ComboBox)sender;
  34. switch (comboBox.SelectedIndex)
  35. {
  36. case 0:
  37. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  38. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  39. _repeater.Layout = new StackLayout { Orientation = Orientation.Vertical };
  40. break;
  41. case 1:
  42. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  43. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  44. _repeater.Layout = new StackLayout { Orientation = Orientation.Horizontal };
  45. break;
  46. case 2:
  47. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
  48. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
  49. _repeater.Layout = new UniformGridLayout
  50. {
  51. Orientation = Orientation.Vertical,
  52. MinItemWidth = 200,
  53. MinItemHeight = 200,
  54. };
  55. break;
  56. case 3:
  57. _scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
  58. _scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  59. _repeater.Layout = new UniformGridLayout
  60. {
  61. Orientation = Orientation.Horizontal,
  62. MinItemWidth = 200,
  63. MinItemHeight = 200,
  64. };
  65. break;
  66. }
  67. }
  68. private void RepeaterClick(object sender, PointerPressedEventArgs e)
  69. {
  70. var item = (e.Source as TextBlock)?.DataContext as string;
  71. ((ItemsRepeaterPageViewModel)DataContext).SelectedItem = item;
  72. }
  73. }
  74. }