using System; using System.Collections; using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Markup.Xaml.Styling; using Avalonia.Markup.Xaml.XamlIl; using Avalonia.Media; using Avalonia.Media.Immutable; using Avalonia.Platform; using ControlCatalog.Pages; namespace ControlCatalog { public class MainView : UserControl { public MainView() { AvaloniaXamlLoader.Load(this); var sideBar = this.FindControl("Sidebar"); if (AvaloniaLocator.Current.GetService().GetRuntimeInfo().IsDesktop) { IList tabItems = ((IList)sideBar.Items); tabItems.Add(new TabItem() { Header = "Dialogs", Content = new DialogsPage() }); tabItems.Add(new TabItem() { Header = "Screens", Content = new ScreenPage() }); } var themes = this.Find("Themes"); themes.SelectionChanged += (sender, e) => { switch (themes.SelectedIndex) { case 0: Application.Current.Styles[0] = App.FluentLight; break; case 1: Application.Current.Styles[0] = App.FluentDark; break; case 2: Application.Current.Styles[0] = App.DefaultLight; break; case 3: Application.Current.Styles[0] = App.DefaultDark; break; } }; var decorations = this.Find("Decorations"); decorations.SelectionChanged += (sender, e) => { if (VisualRoot is Window window) window.SystemDecorations = (SystemDecorations)decorations.SelectedIndex; }; var transparencyLevels = this.Find("TransparencyLevels"); IDisposable backgroundSetter = null, paneBackgroundSetter = null; transparencyLevels.SelectionChanged += (sender, e) => { backgroundSetter?.Dispose(); paneBackgroundSetter?.Dispose(); if (transparencyLevels.SelectedItem is WindowTransparencyLevel selected && selected != WindowTransparencyLevel.None) { var semiTransparentBrush = new ImmutableSolidColorBrush(Colors.Gray, 0.5); backgroundSetter = sideBar.SetValue(BackgroundProperty, semiTransparentBrush, Avalonia.Data.BindingPriority.Style); paneBackgroundSetter = sideBar.SetValue(SplitView.PaneBackgroundProperty, semiTransparentBrush, Avalonia.Data.BindingPriority.Style); } }; } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); var decorations = this.Find("Decorations"); if (VisualRoot is Window window) decorations.SelectedIndex = (int)window.SystemDecorations; } } }