diff --git a/build/SourceLink.props b/build/SourceLink.props index 1e007e01eb7..9f058488812 100644 --- a/build/SourceLink.props +++ b/build/SourceLink.props @@ -3,7 +3,6 @@ true false true - embedded $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb @@ -15,6 +14,10 @@ true + + embedded + + diff --git a/samples/ControlCatalog/App.xaml b/samples/ControlCatalog/App.xaml index 227b31bf202..d0e1bd885e4 100644 --- a/samples/ControlCatalog/App.xaml +++ b/samples/ControlCatalog/App.xaml @@ -3,6 +3,7 @@ xmlns:vm="using:ControlCatalog.ViewModels" x:DataType="vm:ApplicationViewModel" x:CompileBindings="True" + Name="Avalonia ControlCatalog" x:Class="ControlCatalog.App"> diff --git a/src/Avalonia.Themes.Default/Accents/BaseDark.xaml b/src/Avalonia.Themes.Default/Accents/BaseDark.xaml index 5f18bac44ae..1843abebfd4 100644 --- a/src/Avalonia.Themes.Default/Accents/BaseDark.xaml +++ b/src/Avalonia.Themes.Default/Accents/BaseDark.xaml @@ -1,13 +1,9 @@ - diff --git a/src/Avalonia.Themes.Default/Accents/BaseLight.xaml b/src/Avalonia.Themes.Default/Accents/BaseLight.xaml index 30c6d398568..6247815303c 100644 --- a/src/Avalonia.Themes.Default/Accents/BaseLight.xaml +++ b/src/Avalonia.Themes.Default/Accents/BaseLight.xaml @@ -1,82 +1,38 @@ - diff --git a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj index 678f75b43fa..ef200b5532e 100644 --- a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj +++ b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj @@ -13,10 +13,7 @@ - - - - + diff --git a/src/Avalonia.Themes.Default/AutoCompleteBox.xaml b/src/Avalonia.Themes.Default/Controls/AutoCompleteBox.xaml similarity index 100% rename from src/Avalonia.Themes.Default/AutoCompleteBox.xaml rename to src/Avalonia.Themes.Default/Controls/AutoCompleteBox.xaml diff --git a/src/Avalonia.Themes.Default/Button.xaml b/src/Avalonia.Themes.Default/Controls/Button.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Button.xaml rename to src/Avalonia.Themes.Default/Controls/Button.xaml diff --git a/src/Avalonia.Themes.Default/ButtonSpinner.xaml b/src/Avalonia.Themes.Default/Controls/ButtonSpinner.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ButtonSpinner.xaml rename to src/Avalonia.Themes.Default/Controls/ButtonSpinner.xaml diff --git a/src/Avalonia.Themes.Default/Calendar.xaml b/src/Avalonia.Themes.Default/Controls/Calendar.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Calendar.xaml rename to src/Avalonia.Themes.Default/Controls/Calendar.xaml diff --git a/src/Avalonia.Themes.Default/CalendarButton.xaml b/src/Avalonia.Themes.Default/Controls/CalendarButton.xaml similarity index 100% rename from src/Avalonia.Themes.Default/CalendarButton.xaml rename to src/Avalonia.Themes.Default/Controls/CalendarButton.xaml diff --git a/src/Avalonia.Themes.Default/CalendarDatePicker.xaml b/src/Avalonia.Themes.Default/Controls/CalendarDatePicker.xaml similarity index 100% rename from src/Avalonia.Themes.Default/CalendarDatePicker.xaml rename to src/Avalonia.Themes.Default/Controls/CalendarDatePicker.xaml diff --git a/src/Avalonia.Themes.Default/CalendarDayButton.xaml b/src/Avalonia.Themes.Default/Controls/CalendarDayButton.xaml similarity index 100% rename from src/Avalonia.Themes.Default/CalendarDayButton.xaml rename to src/Avalonia.Themes.Default/Controls/CalendarDayButton.xaml diff --git a/src/Avalonia.Themes.Default/CalendarItem.xaml b/src/Avalonia.Themes.Default/Controls/CalendarItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/CalendarItem.xaml rename to src/Avalonia.Themes.Default/Controls/CalendarItem.xaml diff --git a/src/Avalonia.Themes.Default/CaptionButtons.xaml b/src/Avalonia.Themes.Default/Controls/CaptionButtons.xaml similarity index 100% rename from src/Avalonia.Themes.Default/CaptionButtons.xaml rename to src/Avalonia.Themes.Default/Controls/CaptionButtons.xaml diff --git a/src/Avalonia.Themes.Default/Carousel.xaml b/src/Avalonia.Themes.Default/Controls/Carousel.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Carousel.xaml rename to src/Avalonia.Themes.Default/Controls/Carousel.xaml diff --git a/src/Avalonia.Themes.Default/CheckBox.xaml b/src/Avalonia.Themes.Default/Controls/CheckBox.xaml similarity index 100% rename from src/Avalonia.Themes.Default/CheckBox.xaml rename to src/Avalonia.Themes.Default/Controls/CheckBox.xaml diff --git a/src/Avalonia.Themes.Default/ComboBox.xaml b/src/Avalonia.Themes.Default/Controls/ComboBox.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ComboBox.xaml rename to src/Avalonia.Themes.Default/Controls/ComboBox.xaml diff --git a/src/Avalonia.Themes.Default/ComboBoxItem.xaml b/src/Avalonia.Themes.Default/Controls/ComboBoxItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ComboBoxItem.xaml rename to src/Avalonia.Themes.Default/Controls/ComboBoxItem.xaml diff --git a/src/Avalonia.Themes.Default/ContentControl.xaml b/src/Avalonia.Themes.Default/Controls/ContentControl.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ContentControl.xaml rename to src/Avalonia.Themes.Default/Controls/ContentControl.xaml diff --git a/src/Avalonia.Themes.Default/ContextMenu.xaml b/src/Avalonia.Themes.Default/Controls/ContextMenu.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ContextMenu.xaml rename to src/Avalonia.Themes.Default/Controls/ContextMenu.xaml diff --git a/src/Avalonia.Themes.Default/DataValidationErrors.xaml b/src/Avalonia.Themes.Default/Controls/DataValidationErrors.xaml similarity index 100% rename from src/Avalonia.Themes.Default/DataValidationErrors.xaml rename to src/Avalonia.Themes.Default/Controls/DataValidationErrors.xaml diff --git a/src/Avalonia.Themes.Default/DatePicker.xaml b/src/Avalonia.Themes.Default/Controls/DatePicker.xaml similarity index 100% rename from src/Avalonia.Themes.Default/DatePicker.xaml rename to src/Avalonia.Themes.Default/Controls/DatePicker.xaml diff --git a/src/Avalonia.Themes.Default/EmbeddableControlRoot.xaml b/src/Avalonia.Themes.Default/Controls/EmbeddableControlRoot.xaml similarity index 100% rename from src/Avalonia.Themes.Default/EmbeddableControlRoot.xaml rename to src/Avalonia.Themes.Default/Controls/EmbeddableControlRoot.xaml diff --git a/src/Avalonia.Themes.Default/Expander.xaml b/src/Avalonia.Themes.Default/Controls/Expander.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Expander.xaml rename to src/Avalonia.Themes.Default/Controls/Expander.xaml diff --git a/src/Avalonia.Themes.Default/FlyoutPresenter.xaml b/src/Avalonia.Themes.Default/Controls/FlyoutPresenter.xaml similarity index 100% rename from src/Avalonia.Themes.Default/FlyoutPresenter.xaml rename to src/Avalonia.Themes.Default/Controls/FlyoutPresenter.xaml diff --git a/src/Avalonia.Themes.Default/FocusAdorner.xaml b/src/Avalonia.Themes.Default/Controls/FocusAdorner.xaml similarity index 100% rename from src/Avalonia.Themes.Default/FocusAdorner.xaml rename to src/Avalonia.Themes.Default/Controls/FocusAdorner.xaml diff --git a/src/Avalonia.Themes.Default/GridSplitter.xaml b/src/Avalonia.Themes.Default/Controls/GridSplitter.xaml similarity index 100% rename from src/Avalonia.Themes.Default/GridSplitter.xaml rename to src/Avalonia.Themes.Default/Controls/GridSplitter.xaml diff --git a/src/Avalonia.Themes.Default/ItemsControl.xaml b/src/Avalonia.Themes.Default/Controls/ItemsControl.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ItemsControl.xaml rename to src/Avalonia.Themes.Default/Controls/ItemsControl.xaml diff --git a/src/Avalonia.Themes.Default/Label.xaml b/src/Avalonia.Themes.Default/Controls/Label.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Label.xaml rename to src/Avalonia.Themes.Default/Controls/Label.xaml diff --git a/src/Avalonia.Themes.Default/ListBox.xaml b/src/Avalonia.Themes.Default/Controls/ListBox.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ListBox.xaml rename to src/Avalonia.Themes.Default/Controls/ListBox.xaml diff --git a/src/Avalonia.Themes.Default/ListBoxItem.xaml b/src/Avalonia.Themes.Default/Controls/ListBoxItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ListBoxItem.xaml rename to src/Avalonia.Themes.Default/Controls/ListBoxItem.xaml diff --git a/src/Avalonia.Themes.Default/ManagedFileChooser.xaml b/src/Avalonia.Themes.Default/Controls/ManagedFileChooser.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ManagedFileChooser.xaml rename to src/Avalonia.Themes.Default/Controls/ManagedFileChooser.xaml diff --git a/src/Avalonia.Themes.Default/Menu.xaml b/src/Avalonia.Themes.Default/Controls/Menu.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Menu.xaml rename to src/Avalonia.Themes.Default/Controls/Menu.xaml diff --git a/src/Avalonia.Themes.Default/MenuFlyoutPresenter.xaml b/src/Avalonia.Themes.Default/Controls/MenuFlyoutPresenter.xaml similarity index 100% rename from src/Avalonia.Themes.Default/MenuFlyoutPresenter.xaml rename to src/Avalonia.Themes.Default/Controls/MenuFlyoutPresenter.xaml diff --git a/src/Avalonia.Themes.Default/MenuItem.xaml b/src/Avalonia.Themes.Default/Controls/MenuItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/MenuItem.xaml rename to src/Avalonia.Themes.Default/Controls/MenuItem.xaml diff --git a/src/Avalonia.Themes.Default/NativeMenuBar.xaml b/src/Avalonia.Themes.Default/Controls/NativeMenuBar.xaml similarity index 100% rename from src/Avalonia.Themes.Default/NativeMenuBar.xaml rename to src/Avalonia.Themes.Default/Controls/NativeMenuBar.xaml diff --git a/src/Avalonia.Themes.Default/NotificationCard.xaml b/src/Avalonia.Themes.Default/Controls/NotificationCard.xaml similarity index 100% rename from src/Avalonia.Themes.Default/NotificationCard.xaml rename to src/Avalonia.Themes.Default/Controls/NotificationCard.xaml diff --git a/src/Avalonia.Themes.Default/NumericUpDown.xaml b/src/Avalonia.Themes.Default/Controls/NumericUpDown.xaml similarity index 100% rename from src/Avalonia.Themes.Default/NumericUpDown.xaml rename to src/Avalonia.Themes.Default/Controls/NumericUpDown.xaml diff --git a/src/Avalonia.Themes.Default/OverlayPopupHost.xaml b/src/Avalonia.Themes.Default/Controls/OverlayPopupHost.xaml similarity index 100% rename from src/Avalonia.Themes.Default/OverlayPopupHost.xaml rename to src/Avalonia.Themes.Default/Controls/OverlayPopupHost.xaml diff --git a/src/Avalonia.Themes.Default/PathIcon.xaml b/src/Avalonia.Themes.Default/Controls/PathIcon.xaml similarity index 100% rename from src/Avalonia.Themes.Default/PathIcon.xaml rename to src/Avalonia.Themes.Default/Controls/PathIcon.xaml diff --git a/src/Avalonia.Themes.Default/PopupRoot.xaml b/src/Avalonia.Themes.Default/Controls/PopupRoot.xaml similarity index 100% rename from src/Avalonia.Themes.Default/PopupRoot.xaml rename to src/Avalonia.Themes.Default/Controls/PopupRoot.xaml diff --git a/src/Avalonia.Themes.Default/ProgressBar.xaml b/src/Avalonia.Themes.Default/Controls/ProgressBar.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ProgressBar.xaml rename to src/Avalonia.Themes.Default/Controls/ProgressBar.xaml diff --git a/src/Avalonia.Themes.Default/RadioButton.xaml b/src/Avalonia.Themes.Default/Controls/RadioButton.xaml similarity index 100% rename from src/Avalonia.Themes.Default/RadioButton.xaml rename to src/Avalonia.Themes.Default/Controls/RadioButton.xaml diff --git a/src/Avalonia.Themes.Default/RepeatButton.xaml b/src/Avalonia.Themes.Default/Controls/RepeatButton.xaml similarity index 100% rename from src/Avalonia.Themes.Default/RepeatButton.xaml rename to src/Avalonia.Themes.Default/Controls/RepeatButton.xaml diff --git a/src/Avalonia.Themes.Default/ScrollBar.xaml b/src/Avalonia.Themes.Default/Controls/ScrollBar.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ScrollBar.xaml rename to src/Avalonia.Themes.Default/Controls/ScrollBar.xaml diff --git a/src/Avalonia.Themes.Default/ScrollViewer.xaml b/src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ScrollViewer.xaml rename to src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml diff --git a/src/Avalonia.Themes.Default/Separator.xaml b/src/Avalonia.Themes.Default/Controls/Separator.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Separator.xaml rename to src/Avalonia.Themes.Default/Controls/Separator.xaml diff --git a/src/Avalonia.Themes.Default/Slider.xaml b/src/Avalonia.Themes.Default/Controls/Slider.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Slider.xaml rename to src/Avalonia.Themes.Default/Controls/Slider.xaml diff --git a/src/Avalonia.Themes.Default/SplitView.xaml b/src/Avalonia.Themes.Default/Controls/SplitView.xaml similarity index 100% rename from src/Avalonia.Themes.Default/SplitView.xaml rename to src/Avalonia.Themes.Default/Controls/SplitView.xaml diff --git a/src/Avalonia.Themes.Default/TabControl.xaml b/src/Avalonia.Themes.Default/Controls/TabControl.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TabControl.xaml rename to src/Avalonia.Themes.Default/Controls/TabControl.xaml diff --git a/src/Avalonia.Themes.Default/TabItem.xaml b/src/Avalonia.Themes.Default/Controls/TabItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TabItem.xaml rename to src/Avalonia.Themes.Default/Controls/TabItem.xaml diff --git a/src/Avalonia.Themes.Default/TabStrip.xaml b/src/Avalonia.Themes.Default/Controls/TabStrip.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TabStrip.xaml rename to src/Avalonia.Themes.Default/Controls/TabStrip.xaml diff --git a/src/Avalonia.Themes.Default/TabStripItem.xaml b/src/Avalonia.Themes.Default/Controls/TabStripItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TabStripItem.xaml rename to src/Avalonia.Themes.Default/Controls/TabStripItem.xaml diff --git a/src/Avalonia.Themes.Default/TextBox.xaml b/src/Avalonia.Themes.Default/Controls/TextBox.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TextBox.xaml rename to src/Avalonia.Themes.Default/Controls/TextBox.xaml diff --git a/src/Avalonia.Themes.Default/TimePicker.xaml b/src/Avalonia.Themes.Default/Controls/TimePicker.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TimePicker.xaml rename to src/Avalonia.Themes.Default/Controls/TimePicker.xaml diff --git a/src/Avalonia.Themes.Default/TitleBar.xaml b/src/Avalonia.Themes.Default/Controls/TitleBar.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TitleBar.xaml rename to src/Avalonia.Themes.Default/Controls/TitleBar.xaml diff --git a/src/Avalonia.Themes.Default/ToggleButton.xaml b/src/Avalonia.Themes.Default/Controls/ToggleButton.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ToggleButton.xaml rename to src/Avalonia.Themes.Default/Controls/ToggleButton.xaml diff --git a/src/Avalonia.Themes.Default/ToggleSwitch.xaml b/src/Avalonia.Themes.Default/Controls/ToggleSwitch.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ToggleSwitch.xaml rename to src/Avalonia.Themes.Default/Controls/ToggleSwitch.xaml diff --git a/src/Avalonia.Themes.Default/ToolTip.xaml b/src/Avalonia.Themes.Default/Controls/ToolTip.xaml similarity index 100% rename from src/Avalonia.Themes.Default/ToolTip.xaml rename to src/Avalonia.Themes.Default/Controls/ToolTip.xaml diff --git a/src/Avalonia.Themes.Default/TreeView.xaml b/src/Avalonia.Themes.Default/Controls/TreeView.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TreeView.xaml rename to src/Avalonia.Themes.Default/Controls/TreeView.xaml diff --git a/src/Avalonia.Themes.Default/TreeViewItem.xaml b/src/Avalonia.Themes.Default/Controls/TreeViewItem.xaml similarity index 100% rename from src/Avalonia.Themes.Default/TreeViewItem.xaml rename to src/Avalonia.Themes.Default/Controls/TreeViewItem.xaml diff --git a/src/Avalonia.Themes.Default/UserControl.xaml b/src/Avalonia.Themes.Default/Controls/UserControl.xaml similarity index 100% rename from src/Avalonia.Themes.Default/UserControl.xaml rename to src/Avalonia.Themes.Default/Controls/UserControl.xaml diff --git a/src/Avalonia.Themes.Default/Window.xaml b/src/Avalonia.Themes.Default/Controls/Window.xaml similarity index 100% rename from src/Avalonia.Themes.Default/Window.xaml rename to src/Avalonia.Themes.Default/Controls/Window.xaml diff --git a/src/Avalonia.Themes.Default/WindowNotificationManager.xaml b/src/Avalonia.Themes.Default/Controls/WindowNotificationManager.xaml similarity index 100% rename from src/Avalonia.Themes.Default/WindowNotificationManager.xaml rename to src/Avalonia.Themes.Default/Controls/WindowNotificationManager.xaml diff --git a/src/Avalonia.Themes.Default/DefaultTheme.xaml b/src/Avalonia.Themes.Default/DefaultTheme.xaml index 109fde390cc..702fcc7c7a2 100644 --- a/src/Avalonia.Themes.Default/DefaultTheme.xaml +++ b/src/Avalonia.Themes.Default/DefaultTheme.xaml @@ -2,65 +2,65 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Avalonia.Themes.Default.DefaultTheme"> - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia.Themes.Default/DefaultTheme.xaml.cs b/src/Avalonia.Themes.Default/DefaultTheme.xaml.cs index effdb885372..598b418977e 100644 --- a/src/Avalonia.Themes.Default/DefaultTheme.xaml.cs +++ b/src/Avalonia.Themes.Default/DefaultTheme.xaml.cs @@ -1,4 +1,3 @@ -using Avalonia.Markup.Xaml; using Avalonia.Styling; namespace Avalonia.Themes.Default diff --git a/src/Avalonia.Themes.Default/SimpleTheme.cs b/src/Avalonia.Themes.Default/SimpleTheme.cs new file mode 100644 index 00000000000..1d9f2d5f9d4 --- /dev/null +++ b/src/Avalonia.Themes.Default/SimpleTheme.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections.Generic; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Avalonia.Markup.Xaml.Styling; +using Avalonia.Styling; +#nullable enable + +namespace Avalonia.Themes.Default +{ + public class SimpleTheme : AvaloniaObject, IStyle, IResourceProvider + { + public static readonly StyledProperty ModeProperty = + AvaloniaProperty.Register(nameof(Mode)); + + private readonly Uri _baseUri; + private bool _isLoading; + private IStyle? _loaded; + private Styles _sharedStyles = new(); + private Styles _simpleDark = new(); + private Styles _simpleLight = new(); + /// + /// Initializes a new instance of the class. + /// + /// The base URL for the XAML context. + public SimpleTheme(Uri baseUri) + { + _baseUri = baseUri; + InitStyles(_baseUri); + } + + /// + /// Initializes a new instance of the class. + /// + /// The XAML service provider. + public SimpleTheme(IServiceProvider serviceProvider) + { + var service = serviceProvider.GetService(typeof(IUriContext)); + if (service == null) + { + throw new Exception("There is no service object of type IUriContext!"); + } + _baseUri = ((IUriContext)service).BaseUri; + InitStyles(_baseUri); + } + + public event EventHandler OwnerChanged + { + add + { + if (Loaded is IResourceProvider rp) + { + rp.OwnerChanged += value; + } + } + remove + { + if (Loaded is IResourceProvider rp) + { + rp.OwnerChanged -= value; + } + } + } + + IReadOnlyList IStyle.Children => _loaded?.Children ?? Array.Empty(); + + bool IResourceNode.HasResources => (Loaded as IResourceProvider)?.HasResources ?? false; + + public IStyle Loaded + { + get + { + if (_loaded == null) + { + _isLoading = true; + + if (Mode == SimpleThemeMode.Light) + { + _loaded = new Styles { _sharedStyles, _simpleLight }; + } + else if (Mode == SimpleThemeMode.Dark) + { + _loaded = new Styles { _sharedStyles, _simpleDark }; + } + _isLoading = false; + } + + return _loaded!; + } + } + + /// + /// Gets or sets the mode of the fluent theme (light, dark). + /// + public SimpleThemeMode Mode + { + get => GetValue(ModeProperty); + set => SetValue(ModeProperty, value); + } + public IResourceHost? Owner => (Loaded as IResourceProvider)?.Owner; + + void IResourceProvider.AddOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.AddOwner(owner); + + void IResourceProvider.RemoveOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.RemoveOwner(owner); + + public SelectorMatchResult TryAttach(IStyleable target, IStyleHost? host) => Loaded.TryAttach(target, host); + + public bool TryGetResource(object key, out object? value) + { + if (!_isLoading && Loaded is IResourceProvider p) + { + return p.TryGetResource(key, out value); + } + + value = null; + return false; + } + + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + { + base.OnPropertyChanged(change); + if (change.Property == ModeProperty) + { + if (Mode == SimpleThemeMode.Dark) + { + (Loaded as Styles)![1] = _simpleDark[0]; + } + else + { + (Loaded as Styles)![1] = _simpleLight[0]; + } + } + } + + private void InitStyles(Uri baseUri) + { + _sharedStyles = new Styles + { + new StyleInclude(baseUri) + { + Source = new Uri("avares://Avalonia.Themes.Default/DefaultTheme.xaml") + }, + new StyleInclude(baseUri) + { + Source = new Uri("avares://Avalonia.Themes.Default/Accents/Base.xaml") + } + }; + _simpleLight = new Styles + { + new StyleInclude(baseUri) + { + Source = new Uri("avares://Avalonia.Themes.Default/Accents/BaseLight.xaml") + } + }; + + _simpleDark = new Styles + { + new StyleInclude(baseUri) + { + Source = new Uri("avares://Avalonia.Themes.Default/Accents/BaseDark.xaml") + } + }; + } + + } +} diff --git a/src/Avalonia.Themes.Default/SimpleThemeMode.cs b/src/Avalonia.Themes.Default/SimpleThemeMode.cs new file mode 100644 index 00000000000..be334663278 --- /dev/null +++ b/src/Avalonia.Themes.Default/SimpleThemeMode.cs @@ -0,0 +1,8 @@ +namespace Avalonia.Themes.Default +{ + public enum SimpleThemeMode + { + Light, + Dark + } +} diff --git a/src/Avalonia.Themes.Fluent/Controls/CalendarButton.xaml b/src/Avalonia.Themes.Fluent/Controls/CalendarButton.xaml index ca538e4b0ae..3a6af609839 100644 --- a/src/Avalonia.Themes.Fluent/Controls/CalendarButton.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/CalendarButton.xaml @@ -11,7 +11,7 @@ - + diff --git a/src/Avalonia.Themes.Fluent/Controls/CalendarDatePicker.xaml b/src/Avalonia.Themes.Fluent/Controls/CalendarDatePicker.xaml index 6c4e94caf13..26c3bbc19fe 100644 --- a/src/Avalonia.Themes.Fluent/Controls/CalendarDatePicker.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/CalendarDatePicker.xaml @@ -33,6 +33,7 @@ + @@ -107,7 +108,6 @@ Padding="{TemplateBinding Padding}" Watermark="{TemplateBinding Watermark}" UseFloatingWatermark="{TemplateBinding UseFloatingWatermark}" - DataValidationErrors.Errors="{TemplateBinding (DataValidationErrors.Errors)}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="0"/> @@ -136,8 +136,12 @@ DisplayDateEnd="{TemplateBinding DisplayDateEnd}" /> + + diff --git a/src/Avalonia.Themes.Fluent/Controls/CalendarDayButton.xaml b/src/Avalonia.Themes.Fluent/Controls/CalendarDayButton.xaml index ff72044c93c..9223c0dd71c 100644 --- a/src/Avalonia.Themes.Fluent/Controls/CalendarDayButton.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/CalendarDayButton.xaml @@ -11,7 +11,7 @@ - + diff --git a/src/Avalonia.Themes.Fluent/Controls/CalendarItem.xaml b/src/Avalonia.Themes.Fluent/Controls/CalendarItem.xaml index 5bf3ac11af0..2c1031f3e5e 100644 --- a/src/Avalonia.Themes.Fluent/Controls/CalendarItem.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/CalendarItem.xaml @@ -32,6 +32,7 @@