committed by
GitHub
77 changed files with 363 additions and 226 deletions
@ -0,0 +1,64 @@ |
|||||
|
<Style |
||||
|
xmlns="https://github.com/avaloniaui" |
||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
||||
|
xmlns:sys="clr-namespace:System;assembly=netstandard"> |
||||
|
<Style.Resources> |
||||
|
<Color x:Key="ThemeAccentColor">#CC119EDA</Color> |
||||
|
<Color x:Key="ThemeAccentColor2">#99119EDA</Color> |
||||
|
<Color x:Key="ThemeAccentColor3">#66119EDA</Color> |
||||
|
<Color x:Key="ThemeAccentColor4">#33119EDA</Color> |
||||
|
<Color x:Key="ThemeForegroundLowColor">#FF808080</Color> |
||||
|
<Color x:Key="HighlightForegroundColor">#FFFFFFFF</Color> |
||||
|
<Color x:Key="ErrorColor">#FFFF0000</Color> |
||||
|
<Color x:Key="ErrorLowColor">#10FF0000</Color> |
||||
|
<SolidColorBrush x:Key="HighlightForegroundBrush" Color="{StaticResource HighlightForegroundColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeForegroundLowBrush" Color="{StaticResource ThemeForegroundLowColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeAccentBrush2" Color="{StaticResource ThemeAccentColor2}" /> |
||||
|
<SolidColorBrush x:Key="ThemeAccentBrush3" Color="{StaticResource ThemeAccentColor3}" /> |
||||
|
<SolidColorBrush x:Key="ThemeAccentBrush4" Color="{StaticResource ThemeAccentColor4}" /> |
||||
|
<SolidColorBrush x:Key="ThemeAccentBrush" Color="{StaticResource ThemeAccentColor}" /> |
||||
|
<SolidColorBrush x:Key="ErrorBrush" Color="{StaticResource ErrorColor}" /> |
||||
|
<SolidColorBrush x:Key="ErrorLowBrush" Color="{StaticResource ErrorLowColor}" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="NotificationCardBackgroundBrush" |
||||
|
Opacity="0.75" |
||||
|
Color="#444444" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="NotificationCardInformationBackgroundBrush" |
||||
|
Opacity="0.75" |
||||
|
Color="#007ACC" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="NotificationCardSuccessBackgroundBrush" |
||||
|
Opacity="0.75" |
||||
|
Color="#1F9E45" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="NotificationCardWarningBackgroundBrush" |
||||
|
Opacity="0.75" |
||||
|
Color="#FDB328" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="NotificationCardErrorBackgroundBrush" |
||||
|
Opacity="0.75" |
||||
|
Color="#BD202C" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlTransparentBrush" Color="Transparent" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="DatePickerFlyoutPresenterHighlightFill" |
||||
|
Opacity="0.4" |
||||
|
Color="{StaticResource ThemeAccentColor}" /> |
||||
|
<SolidColorBrush |
||||
|
x:Key="TimePickerFlyoutPresenterHighlightFill" |
||||
|
Opacity="0.4" |
||||
|
Color="{StaticResource ThemeAccentColor}" /> |
||||
|
<Thickness x:Key="ThemeBorderThickness">1</Thickness> |
||||
|
<sys:Double x:Key="ThemeDisabledOpacity">0.5</sys:Double> |
||||
|
|
||||
|
<sys:Double x:Key="FontSizeSmall">10</sys:Double> |
||||
|
<sys:Double x:Key="FontSizeNormal">12</sys:Double> |
||||
|
<sys:Double x:Key="FontSizeLarge">16</sys:Double> |
||||
|
|
||||
|
<sys:Double x:Key="ScrollBarThickness">18</sys:Double> |
||||
|
<sys:Double x:Key="ScrollBarThumbThickness">8</sys:Double> |
||||
|
|
||||
|
<sys:Double x:Key="IconElementThemeHeight">20</sys:Double> |
||||
|
<sys:Double x:Key="IconElementThemeWidth">20</sys:Double> |
||||
|
</Style.Resources> |
||||
|
</Style> |
||||
@ -1,82 +1,38 @@ |
|||||
<Style xmlns="https://github.com/avaloniaui" |
<Style |
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
xmlns="https://github.com/avaloniaui" |
||||
xmlns:sys="clr-namespace:System;assembly=netstandard"> |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
||||
|
xmlns:sys="clr-namespace:System;assembly=netstandard"> |
||||
<Style.Resources> |
<Style.Resources> |
||||
|
|
||||
<Color x:Key="ThemeAccentColor">#CC119EDA</Color> |
|
||||
<Color x:Key="ThemeAccentColor2">#99119EDA</Color> |
|
||||
<Color x:Key="ThemeAccentColor3">#66119EDA</Color> |
|
||||
<Color x:Key="ThemeAccentColor4">#33119EDA</Color> |
|
||||
|
|
||||
<Color x:Key="ThemeBackgroundColor">#FFFFFFFF</Color> |
<Color x:Key="ThemeBackgroundColor">#FFFFFFFF</Color> |
||||
<Color x:Key="ThemeBorderLowColor">#FFAAAAAA</Color> |
<Color x:Key="ThemeBorderLowColor">#FFAAAAAA</Color> |
||||
<Color x:Key="ThemeBorderMidColor">#FF888888</Color> |
<Color x:Key="ThemeBorderMidColor">#FF888888</Color> |
||||
<Color x:Key="ThemeBorderHighColor">#FF333333</Color> |
<Color x:Key="ThemeBorderHighColor">#FF333333</Color> |
||||
|
|
||||
|
|
||||
<Color x:Key="ThemeControlLowColor">#FF868999</Color> |
<Color x:Key="ThemeControlLowColor">#FF868999</Color> |
||||
<Color x:Key="ThemeControlMidColor">#FFF5F5F5</Color> |
<Color x:Key="ThemeControlMidColor">#FFF5F5F5</Color> |
||||
<Color x:Key="ThemeControlMidHighColor">#FFC2C3C9</Color> |
<Color x:Key="ThemeControlMidHighColor">#FFC2C3C9</Color> |
||||
<Color x:Key="ThemeControlHighColor">#FF686868</Color> |
<Color x:Key="ThemeControlHighColor">#FF686868</Color> |
||||
<Color x:Key="ThemeControlVeryHighColor">#FF5B5B5B</Color> |
<Color x:Key="ThemeControlVeryHighColor">#FF5B5B5B</Color> |
||||
|
|
||||
<Color x:Key="ThemeControlHighlightLowColor">#FFF0F0F0</Color> |
<Color x:Key="ThemeControlHighlightLowColor">#FFF0F0F0</Color> |
||||
<Color x:Key="ThemeControlHighlightMidColor">#FFD0D0D0</Color> |
<Color x:Key="ThemeControlHighlightMidColor">#FFD0D0D0</Color> |
||||
<Color x:Key="ThemeControlHighlightHighColor">#FF808080</Color> |
<Color x:Key="ThemeControlHighlightHighColor">#FF808080</Color> |
||||
<Color x:Key="ThemeForegroundColor">#FF000000</Color> |
<Color x:Key="ThemeForegroundColor">#FF000000</Color> |
||||
<Color x:Key="ThemeForegroundLowColor">#FF808080</Color> |
|
||||
|
|
||||
<Color x:Key="HighlightColor">#FF086F9E</Color> |
<Color x:Key="HighlightColor">#FF086F9E</Color> |
||||
<Color x:Key="HighlightForegroundColor">#FFFFFFFF</Color> |
|
||||
<Color x:Key="ErrorColor">#FFFF0000</Color> |
|
||||
<Color x:Key="ErrorLowColor">#10FF0000</Color> |
|
||||
|
|
||||
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="{DynamicResource ThemeBackgroundColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeBorderLowBrush" Color="{DynamicResource ThemeBorderLowColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeBorderMidBrush" Color="{DynamicResource ThemeBorderMidColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeBorderHighBrush" Color="{DynamicResource ThemeBorderHighColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlLowBrush" Color="{DynamicResource ThemeControlLowColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlMidBrush" Color="{DynamicResource ThemeControlMidColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlMidHighBrush" Color="{DynamicResource ThemeControlMidHighColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlHighBrush" Color="{DynamicResource ThemeControlHighColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlVeryHighBrush" Color="{DynamicResource ThemeControlVeryHighColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlHighlightLowBrush" Color="{DynamicResource ThemeControlHighlightLowColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlHighlightMidBrush" Color="{DynamicResource ThemeControlHighlightMidColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeControlHighlightHighBrush" Color="{DynamicResource ThemeControlHighlightHighColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeForegroundBrush" Color="{DynamicResource ThemeForegroundColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeForegroundLowBrush" Color="{DynamicResource ThemeForegroundLowColor}"></SolidColorBrush> |
|
||||
|
|
||||
<SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource HighlightColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="HighlightForegroundBrush" Color="{DynamicResource HighlightForegroundColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeAccentBrush" Color="{DynamicResource ThemeAccentColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeAccentBrush2" Color="{DynamicResource ThemeAccentColor2}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeAccentBrush3" Color="{DynamicResource ThemeAccentColor3}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ThemeAccentBrush4" Color="{DynamicResource ThemeAccentColor4}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ErrorBrush" Color="{DynamicResource ErrorColor}"></SolidColorBrush> |
|
||||
<SolidColorBrush x:Key="ErrorLowBrush" Color="{DynamicResource ErrorLowColor}"></SolidColorBrush> |
|
||||
|
|
||||
<SolidColorBrush x:Key="NotificationCardBackgroundBrush" Color="#444444" Opacity="0.75"/> |
|
||||
<SolidColorBrush x:Key="NotificationCardInformationBackgroundBrush" Color="#007ACC" Opacity="0.75"/> |
|
||||
<SolidColorBrush x:Key="NotificationCardSuccessBackgroundBrush" Color="#1F9E45" Opacity="0.75"/> |
|
||||
<SolidColorBrush x:Key="NotificationCardWarningBackgroundBrush" Color="#FDB328" Opacity="0.75"/> |
|
||||
<SolidColorBrush x:Key="NotificationCardErrorBackgroundBrush" Color="#BD202C" Opacity="0.75"/> |
|
||||
|
|
||||
<SolidColorBrush x:Key="DatePickerFlyoutPresenterHighlightFill" Color="{DynamicResource ThemeAccentColor}" Opacity="0.4" /> |
|
||||
<SolidColorBrush x:Key="TimePickerFlyoutPresenterHighlightFill" Color="{DynamicResource ThemeAccentColor}" Opacity="0.4" /> |
|
||||
|
|
||||
<SolidColorBrush x:Key="ThemeControlTransparentBrush" Color="Transparent" /> |
|
||||
|
|
||||
<Thickness x:Key="ThemeBorderThickness">1</Thickness> |
|
||||
<sys:Double x:Key="ThemeDisabledOpacity">0.5</sys:Double> |
|
||||
|
|
||||
<sys:Double x:Key="FontSizeSmall">10</sys:Double> |
|
||||
<sys:Double x:Key="FontSizeNormal">12</sys:Double> |
|
||||
<sys:Double x:Key="FontSizeLarge">16</sys:Double> |
|
||||
|
|
||||
<sys:Double x:Key="ScrollBarThickness">18</sys:Double> |
|
||||
<sys:Double x:Key="ScrollBarThumbThickness">8</sys:Double> |
|
||||
|
|
||||
<sys:Double x:Key="IconElementThemeHeight">20</sys:Double> |
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="{StaticResource ThemeBackgroundColor}" /> |
||||
<sys:Double x:Key="IconElementThemeWidth">20</sys:Double> |
<SolidColorBrush x:Key="ThemeBorderLowBrush" Color="{StaticResource ThemeBorderLowColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeBorderMidBrush" Color="{StaticResource ThemeBorderMidColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeBorderHighBrush" Color="{StaticResource ThemeBorderHighColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlLowBrush" Color="{StaticResource ThemeControlLowColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlMidBrush" Color="{StaticResource ThemeControlMidColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlMidHighBrush" Color="{StaticResource ThemeControlMidHighColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlHighBrush" Color="{StaticResource ThemeControlHighColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlVeryHighBrush" Color="{StaticResource ThemeControlVeryHighColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlHighlightLowBrush" Color="{StaticResource ThemeControlHighlightLowColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlHighlightMidBrush" Color="{StaticResource ThemeControlHighlightMidColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeControlHighlightHighBrush" Color="{StaticResource ThemeControlHighlightHighColor}" /> |
||||
|
<SolidColorBrush x:Key="ThemeForegroundBrush" Color="{StaticResource ThemeForegroundColor}" /> |
||||
|
|
||||
|
<SolidColorBrush x:Key="HighlightBrush" Color="{StaticResource HighlightColor}" /> |
||||
</Style.Resources> |
</Style.Resources> |
||||
</Style> |
</Style> |
||||
|
|||||
@ -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<SimpleThemeMode> ModeProperty = |
||||
|
AvaloniaProperty.Register<SimpleTheme, SimpleThemeMode>(nameof(Mode)); |
||||
|
|
||||
|
private readonly Uri _baseUri; |
||||
|
private bool _isLoading; |
||||
|
private IStyle? _loaded; |
||||
|
private Styles _sharedStyles = new(); |
||||
|
private Styles _simpleDark = new(); |
||||
|
private Styles _simpleLight = new(); |
||||
|
/// <summary>
|
||||
|
/// Initializes a new instance of the <see cref="SimpleTheme"/> class.
|
||||
|
/// </summary>
|
||||
|
/// <param name="baseUri">The base URL for the XAML context.</param>
|
||||
|
public SimpleTheme(Uri baseUri) |
||||
|
{ |
||||
|
_baseUri = baseUri; |
||||
|
InitStyles(_baseUri); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Initializes a new instance of the <see cref="SimpleTheme"/> class.
|
||||
|
/// </summary>
|
||||
|
/// <param name="serviceProvider">The XAML service provider.</param>
|
||||
|
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> IStyle.Children => _loaded?.Children ?? Array.Empty<IStyle>(); |
||||
|
|
||||
|
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!; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Gets or sets the mode of the fluent theme (light, dark).
|
||||
|
/// </summary>
|
||||
|
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<T>(AvaloniaPropertyChangedEventArgs<T> 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") |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
namespace Avalonia.Themes.Default |
||||
|
{ |
||||
|
public enum SimpleThemeMode |
||||
|
{ |
||||
|
Light, |
||||
|
Dark |
||||
|
} |
||||
|
} |
||||
@ -1,8 +1,10 @@ |
|||||
<Application xmlns="https://github.com/avaloniaui" |
<Application |
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
x:Class="Avalonia.DesignerSupport.TestApp.App" |
||||
x:Class="Avalonia.DesignerSupport.TestApp.App"> |
xmlns="https://github.com/avaloniaui" |
||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
||||
<Application.Styles> |
<Application.Styles> |
||||
<StyleInclude Source="resm:Avalonia.Themes.Default.DefaultTheme.xaml?assembly=Avalonia.Themes.Default"/> |
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml" /> |
||||
<StyleInclude Source="resm:Avalonia.Themes.Default.Accents.BaseLight.xaml?assembly=Avalonia.Themes.Default"/> |
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/Base.xaml" /> |
||||
|
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml" /> |
||||
</Application.Styles> |
</Application.Styles> |
||||
</Application> |
</Application> |
||||
|
|||||
Loading…
Reference in new issue