TabbedPageFirstLookPage.xaml.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Collections;
  2. using Avalonia.Controls;
  3. using Avalonia.Interactivity;
  4. namespace ControlCatalog.Pages
  5. {
  6. public partial class TabbedPageFirstLookPage : UserControl
  7. {
  8. private int _tabCounter = 3;
  9. public TabbedPageFirstLookPage()
  10. {
  11. InitializeComponent();
  12. }
  13. private void OnAddTab(object? sender, RoutedEventArgs e)
  14. {
  15. var idx = ++_tabCounter;
  16. var page = new ContentPage
  17. {
  18. Header = $"Tab {idx}",
  19. Content = new StackPanel
  20. {
  21. Margin = new Avalonia.Thickness(16),
  22. Spacing = 8,
  23. Children =
  24. {
  25. new TextBlock
  26. {
  27. Text = $"Tab {idx}",
  28. FontSize = 24,
  29. FontWeight = Avalonia.Media.FontWeight.Bold
  30. },
  31. new TextBlock
  32. {
  33. Text = $"This tab was added dynamically (tab #{idx}).",
  34. Opacity = 0.7,
  35. TextWrapping = Avalonia.Media.TextWrapping.Wrap
  36. }
  37. }
  38. }
  39. };
  40. ((IList)DemoTabs.Pages!).Add(page);
  41. UpdateStatus();
  42. }
  43. private void OnRemoveTab(object? sender, RoutedEventArgs e)
  44. {
  45. var pages = (IList)DemoTabs.Pages!;
  46. if (pages.Count > 1)
  47. {
  48. pages.RemoveAt(pages.Count - 1);
  49. UpdateStatus();
  50. }
  51. }
  52. private void OnPlacementChanged(object? sender, SelectionChangedEventArgs e)
  53. {
  54. if (DemoTabs == null) return;
  55. DemoTabs.TabPlacement = PlacementCombo.SelectedIndex switch
  56. {
  57. 1 => TabPlacement.Bottom,
  58. 2 => TabPlacement.Left,
  59. 3 => TabPlacement.Right,
  60. _ => TabPlacement.Top
  61. };
  62. }
  63. private void OnSelectionChanged(object? sender, PageSelectionChangedEventArgs e)
  64. {
  65. UpdateStatus();
  66. }
  67. private void UpdateStatus()
  68. {
  69. if (StatusText == null) return;
  70. var pages = (IList)DemoTabs.Pages!;
  71. var pageName = (DemoTabs.SelectedPage as ContentPage)?.Header?.ToString() ?? "—";
  72. StatusText.Text = $"{pages.Count} tab{(pages.Count != 1 ? "s" : "")} | Selected: {pageName} ({DemoTabs.SelectedIndex})";
  73. }
  74. }
  75. }