MainView.xaml.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Collections;
  3. using Avalonia;
  4. using Avalonia.Controls;
  5. using Avalonia.Markup.Xaml;
  6. using Avalonia.Markup.Xaml.MarkupExtensions;
  7. using Avalonia.Markup.Xaml.Styling;
  8. using Avalonia.Markup.Xaml.XamlIl;
  9. using Avalonia.Media;
  10. using Avalonia.Media.Immutable;
  11. using Avalonia.Platform;
  12. using ControlCatalog.Pages;
  13. namespace ControlCatalog
  14. {
  15. public class MainView : UserControl
  16. {
  17. public MainView()
  18. {
  19. AvaloniaXamlLoader.Load(this);
  20. var sideBar = this.FindControl<TabControl>("Sidebar");
  21. if (AvaloniaLocator.Current.GetService<IRuntimePlatform>().GetRuntimeInfo().IsDesktop)
  22. {
  23. IList tabItems = ((IList)sideBar.Items);
  24. tabItems.Add(new TabItem()
  25. {
  26. Header = "Dialogs",
  27. Content = new DialogsPage()
  28. });
  29. tabItems.Add(new TabItem()
  30. {
  31. Header = "Screens",
  32. Content = new ScreenPage()
  33. });
  34. }
  35. var themes = this.Find<ComboBox>("Themes");
  36. themes.SelectionChanged += (sender, e) =>
  37. {
  38. switch (themes.SelectedIndex)
  39. {
  40. case 0:
  41. Application.Current.Styles[0] = App.FluentLight;
  42. break;
  43. case 1:
  44. Application.Current.Styles[0] = App.FluentDark;
  45. break;
  46. case 2:
  47. Application.Current.Styles[0] = App.DefaultLight;
  48. break;
  49. case 3:
  50. Application.Current.Styles[0] = App.DefaultDark;
  51. break;
  52. }
  53. };
  54. var decorations = this.Find<ComboBox>("Decorations");
  55. decorations.SelectionChanged += (sender, e) =>
  56. {
  57. if (VisualRoot is Window window)
  58. window.SystemDecorations = (SystemDecorations)decorations.SelectedIndex;
  59. };
  60. var transparencyLevels = this.Find<ComboBox>("TransparencyLevels");
  61. IDisposable backgroundSetter = null, paneBackgroundSetter = null;
  62. transparencyLevels.SelectionChanged += (sender, e) =>
  63. {
  64. backgroundSetter?.Dispose();
  65. paneBackgroundSetter?.Dispose();
  66. if (transparencyLevels.SelectedItem is WindowTransparencyLevel selected
  67. && selected != WindowTransparencyLevel.None)
  68. {
  69. var semiTransparentBrush = new ImmutableSolidColorBrush(Colors.Gray, 0.5);
  70. backgroundSetter = sideBar.SetValue(BackgroundProperty, semiTransparentBrush, Avalonia.Data.BindingPriority.Style);
  71. paneBackgroundSetter = sideBar.SetValue(SplitView.PaneBackgroundProperty, semiTransparentBrush, Avalonia.Data.BindingPriority.Style);
  72. }
  73. };
  74. }
  75. protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
  76. {
  77. base.OnAttachedToVisualTree(e);
  78. var decorations = this.Find<ComboBox>("Decorations");
  79. if (VisualRoot is Window window)
  80. decorations.SelectedIndex = (int)window.SystemDecorations;
  81. }
  82. }
  83. }