diff --git a/demo/Semi.Avalonia.Demo.Desktop/App.axaml b/demo/Semi.Avalonia.Demo.Desktop/App.axaml index cb85fcd..c12b782 100644 --- a/demo/Semi.Avalonia.Demo.Desktop/App.axaml +++ b/demo/Semi.Avalonia.Demo.Desktop/App.axaml @@ -2,7 +2,8 @@ x:Class="Semi.Avalonia.Demo.Desktop.App" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:local="using:Semi.Avalonia.Demo.Desktop"> + xmlns:local="using:Semi.Avalonia.Demo.Desktop" + RequestedThemeVariant="Light"> diff --git a/demo/Semi.Avalonia.Demo/Controls/ColorDetailControl.axaml b/demo/Semi.Avalonia.Demo/Controls/ColorDetailControl.axaml new file mode 100644 index 0000000..81d842e --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Controls/ColorDetailControl.axaml @@ -0,0 +1,109 @@ + + M5 7C3.89543 7 3 7.89543 3 9V19C3 20.1046 3.89543 21 5 21H15C16.1046 21 17 20.1046 17 19V9C17 7.89543 16.1046 7 15 7H5Z,M7 4C7 2.89543 7.89543 2 9 2H20C21.1046 2 22 2.89543 22 4V15C22 16.1046 21.1046 17 20 17H19V8C19 6 18 5 16 5H7V4Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/Semi.Avalonia.Demo/Controls/ColorDetailControl.cs b/demo/Semi.Avalonia.Demo/Controls/ColorDetailControl.cs new file mode 100644 index 0000000..0dfc7d8 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Controls/ColorDetailControl.cs @@ -0,0 +1,91 @@ +using System.Globalization; +using Avalonia; +using Avalonia.Controls.Primitives; +using Avalonia.Input.Platform; +using Avalonia.Media; +using Avalonia.Media.Immutable; + +namespace Semi.Avalonia.Demo.Controls; + +public class ColorDetailControl: TemplatedControl +{ + public const string KEY_ResourceKey = "ResourceKey"; + public const string KEY_Hex = "Hex"; + public const string KEY_Opacity = "Opacity"; + + public static readonly StyledProperty ResourceKeyProperty = AvaloniaProperty.Register( + nameof(ResourceKey)); + public string? ResourceKey + { + get => GetValue(ResourceKeyProperty); + set => SetValue(ResourceKeyProperty, value); + } + + public static readonly StyledProperty ResourceNameProperty = AvaloniaProperty.Register( + nameof(ResourceName)); + + public string? ResourceName + { + get => GetValue(ResourceNameProperty); + set => SetValue(ResourceNameProperty, value); + } + + public static readonly DirectProperty HexProperty = AvaloniaProperty.RegisterDirect( + nameof(Hex), o => o.Hex); + private string? _hex; + public string? Hex + { + get => _hex; + private set => SetAndRaise(HexProperty, ref _hex, value); + } + + public static readonly DirectProperty OpacityNumberProperty = AvaloniaProperty.RegisterDirect( + nameof(OpacityNumber), o => o.OpacityNumber); + private string? _opacityNumber; + public string? OpacityNumber + { + get => _opacityNumber; + private set => SetAndRaise(OpacityNumberProperty, ref _opacityNumber, value); + } + + + static ColorDetailControl() + { + BackgroundProperty.Changed.AddClassHandler((o, e) => o.OnBackgroundChanged(e)); + } + + private void OnBackgroundChanged(AvaloniaPropertyChangedEventArgs args) + { + var color = args.GetNewValue(); + if (color is ISolidColorBrush b) + { + Hex = b.Color.ToString().ToUpperInvariant(); + OpacityNumber = b.Opacity.ToString(CultureInfo.InvariantCulture); + } + } + + public async void Copy(object o) + { + string? text = null; + if (o is string s) + { + switch (s) + { + case KEY_ResourceKey: text = ResourceKey; + break; + case KEY_Hex: text = Hex; + break; + case KEY_Opacity: text = OpacityNumber; + break; + default: text = string.Empty; break; + } + } + + if (Application.Current is { Clipboard: { } c }) + { + await c.SetTextAsync(text??string.Empty); + } + + } + +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.axaml b/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.axaml new file mode 100644 index 0000000..25b4bd9 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.axaml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.cs b/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.cs new file mode 100644 index 0000000..04c8000 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.cs @@ -0,0 +1,39 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Input; +using CommunityToolkit.Mvvm.Messaging; +using Semi.Avalonia.Demo.ViewModels; + +namespace Semi.Avalonia.Demo.Controls; + +public class ColorItemControl : TemplatedControl +{ + public static readonly StyledProperty ColorNameProperty = AvaloniaProperty.Register( + nameof(ColorName)); + + public string? ColorName + { + get => GetValue(ColorNameProperty); + set => SetValue(ColorNameProperty, value); + } + + public static readonly StyledProperty HexProperty = AvaloniaProperty.Register( + nameof(Hex)); + + public string? Hex + { + get => GetValue(HexProperty); + set => SetValue(HexProperty, value); + } + + protected override void OnPointerPressed(PointerPressedEventArgs e) + { + base.OnPointerPressed(e); + if (this.DataContext is ColorItemViewModel v) + { + WeakReferenceMessenger.Default.Send(v); + } + + } +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo/Controls/FunctionalColorGroupControl.axaml b/demo/Semi.Avalonia.Demo/Controls/FunctionalColorGroupControl.axaml new file mode 100644 index 0000000..2fec1e7 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Controls/FunctionalColorGroupControl.axaml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/Semi.Avalonia.Demo/Controls/FunctionalColorGroupControl.cs b/demo/Semi.Avalonia.Demo/Controls/FunctionalColorGroupControl.cs new file mode 100644 index 0000000..b7bbb44 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Controls/FunctionalColorGroupControl.cs @@ -0,0 +1,36 @@ +using System.Collections; +using Avalonia; +using Avalonia.Controls.Primitives; + +namespace Semi.Avalonia.Demo.Controls; + +public class FunctionalColorGroupControl: TemplatedControl +{ + public static readonly StyledProperty TitleProperty = AvaloniaProperty.Register( + nameof(Title)); + public string? Title + { + get => GetValue(TitleProperty); + set => SetValue(TitleProperty, value); + } + + public static readonly DirectProperty LightColorsProperty = AvaloniaProperty.RegisterDirect( + nameof(LightColors), o => o.LightColors, (o, v) => o.LightColors = v); + private IEnumerable _lightColors; + public IEnumerable LightColors + { + get => _lightColors; + set => SetAndRaise(LightColorsProperty, ref _lightColors, value); + } + + public static readonly DirectProperty DarkColorsProperty = AvaloniaProperty.RegisterDirect( + nameof(DarkColors), o => o.DarkColors, (o, v) => o.DarkColors = v); + private IEnumerable _darkColors; + public IEnumerable DarkColors + { + get => _darkColors; + set => SetAndRaise(DarkColorsProperty, ref _darkColors, value); + } + + +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml new file mode 100644 index 0000000..c9238ed --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs new file mode 100644 index 0000000..4ef2ecf --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Markup.Xaml; +using Avalonia.Threading; +using Semi.Avalonia.Demo.ViewModels; + +namespace Semi.Avalonia.Demo.Pages; + +public partial class PaletteDemo : UserControl +{ + public PaletteDemo() + { + InitializeComponent(); + + } + + protected override async void OnApplyTemplate(TemplateAppliedEventArgs e) + { + base.OnApplyTemplate(e); + PaletteDemoViewModel? vm = new PaletteDemoViewModel(); + await Dispatcher.UIThread.InvokeAsync(() => + { + vm.InitializeResources(); + }); + DataContext = vm; + } +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj b/demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj index 7d026cc..ad24460 100644 --- a/demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj +++ b/demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj @@ -47,8 +47,4 @@ - - - - diff --git a/demo/Semi.Avalonia.Demo/Themes/ToggleButton.axaml b/demo/Semi.Avalonia.Demo/Themes/ToggleButton.axaml index 6a113d4..140bf91 100644 --- a/demo/Semi.Avalonia.Demo/Themes/ToggleButton.axaml +++ b/demo/Semi.Avalonia.Demo/Themes/ToggleButton.axaml @@ -27,7 +27,31 @@ + + + + + + + + + + + + diff --git a/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs b/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs new file mode 100644 index 0000000..33f98f1 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs @@ -0,0 +1,349 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Messaging; + +namespace Semi.Avalonia.Demo.ViewModels; + +public class PaletteDemoViewModel: ObservableObject +{ + private readonly string[] _predefinedColorNames = { "Amber","Blue","Cyan","Green","Grey","Indigo","LightBlue","LightGreen","Lime","Orange","Pink","Purple","Red","Teal","Violet","Yellow" }; + private IResourceDictionary _lightResourceDictionary; + private IResourceDictionary _darkResourceDictionary; + + private ColorItemViewModel _selectedColor; + + public ColorItemViewModel SelectedColor + { + get => _selectedColor; + set => SetProperty(ref _selectedColor, value); + } + + + private ObservableCollection _lightLists; + public ObservableCollection LightLists + { + get => _lightLists; + set => SetProperty(ref _lightLists, value); + } + private ObservableCollection _darkLists; + public ObservableCollection DarkLists + { + get => _darkLists; + set => SetProperty(ref _darkLists, value); + } + + public ObservableCollection FunctionalColors { get; set; } = new(); + + public PaletteDemoViewModel() + { + _lightResourceDictionary = (ResourceDictionary)AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Light/Palette.axaml")); + _darkResourceDictionary = (ResourceDictionary)AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Dark/Palette.axaml")); + WeakReferenceMessenger.Default.Register(this, OnClickColorItem); + } + + public void InitializeResources() + { + InitializePalette(); + InitializeFunctionalColors(); + } + + private void InitializePalette() + { + LightLists = new ObservableCollection(); + foreach (var color in _predefinedColorNames) + { + ColorListViewModel s = new ColorListViewModel(); + s.Initialize(_lightResourceDictionary, color, true); + LightLists.Add(s); + } + DarkLists = new ObservableCollection(); + foreach (var color in _predefinedColorNames) + { + ColorListViewModel s = new ColorListViewModel(); + s.Initialize(_darkResourceDictionary, color, false); + DarkLists.Add(s); + } + } + + private void InitializeFunctionalColors() + { + FunctionalColors.Add(new FunctionalColorGroupViewModel("Primary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.PrimaryTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Secondary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.SecondaryTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Tertiary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TertiaryTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Information", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.InformationTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Success", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.SuccessTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Warning", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.WarningTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Danger", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DangerTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Text", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TextTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Link", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.LinkTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Background", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.BackgroundTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Fill", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.FillTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Border", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.BorderTokens)); + FunctionalColors.Add(new FunctionalColorGroupViewModel("Disabled", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DisabledTokens)); + } + private void OnClickColorItem(PaletteDemoViewModel vm, ColorItemViewModel item) + { + SelectedColor = item; + } +} + +public class ColorListViewModel: ObservableObject +{ + private ObservableCollection? _colors; + + public ObservableCollection? Color + { + get => _colors; + set => SetProperty(ref _colors, value); + } + + private string? _seriesName; + + public string? SeriesName + { + get => _seriesName; + set => SetProperty(ref _seriesName, value); + } + + internal void Initialize(IResourceDictionary resourceDictionary, string color, bool light) + { + SeriesName = color; + Color = new ObservableCollection(); + + for (int i = 0; i < 10; i++) + { + var key = "Semi" + color + i; + if (resourceDictionary.TryGetValue(key, out var value)) + { + if (value is ISolidColorBrush brush) + { + string name = color + " " + i; + var item = new ColorItemViewModel(name, brush, key, light, i); + Color.Add(item); + } + } + } + } +} + +public class ColorItemViewModel : ObservableObject +{ + + private IBrush _brush; + public IBrush Brush + { + get => _brush; + set => SetProperty(ref _brush, value); + } + + private IBrush _textBrush; + public IBrush TextBrush + { + get => _textBrush; + set => SetProperty(ref _textBrush, value); + } + + private string _colorDisplayName; + public string ColorDisplayName + { + get => _colorDisplayName; + set => SetProperty(ref _colorDisplayName, value); + } + + private string _resourceKey; + + public string ResourceKey + { + get => _resourceKey; + set => SetProperty(ref _resourceKey, value); + } + + private string _hex; + + public string Hex + { + get => _hex; + set => SetProperty(ref _hex, value); + } + + public ColorItemViewModel(string colorDisplayName, ISolidColorBrush brush, string resourceKey, bool light, int index) + { + ColorDisplayName = colorDisplayName; + Brush = brush; + ResourceKey = resourceKey; + Hex = brush.ToString().ToUpperInvariant(); + if ((light && index < 5) || (!light && index > 5)) + { + TextBrush = Brushes.Black; + } + else + { + TextBrush = Brushes.White; + } + } +} + +public class FunctionalColorGroupViewModel : ObservableObject +{ + private string _title; + public string Title + { + get => _title; + set => SetProperty(ref _title, value); + } + + public ObservableCollection LightColors { get; set; } = new(); + public ObservableCollection DarkColors { get; set; } = new(); + + public FunctionalColorGroupViewModel(string title, IResourceDictionary lightDictionary, IResourceDictionary darkDictionary, IReadOnlyList> tokens) + { + Title = title; + foreach (var token in tokens) + { + string key = token.Item1; + string name = token.Item2; + if (lightDictionary.TryGetValue(key, out var lightValue)) + { + if (lightValue is ISolidColorBrush lightBrush) + { + LightColors.Add(new ColorItemViewModel(name, lightBrush, key, true, 0)); + } + } + if (darkDictionary.TryGetValue(key, out var darkValue)) + { + if (darkValue is ISolidColorBrush darkBrush) + { + DarkColors.Add(new ColorItemViewModel(name, darkBrush, key, true, 0)); + } + } + } + } +} + +public static class ColorTokens +{ + public static IReadOnlyList> PrimaryTokens { get; } = new List> + { + new ("SemiColorPrimary", "Primary"), + new ("SemiColorPrimaryPointerover", "Primary Pointerover"), + new ("SemiColorPrimaryPressed", "Primary Pressed"), + new ("SemiColorPrimaryDisabled", "Primary Disabled"), + new ("SemiColorPrimaryLight", "Primary Light"), + new ("SemiColorPrimaryLightPointerover", "Primary Light Pointerover"), + new ("SemiColorPrimaryLightActive", "Primary Light Active"), + }; + + public static IReadOnlyList> SecondaryTokens { get; } = new List> + { + new ("SemiColorSecondary", "Secondary"), + new ("SemiColorSecondaryPointerover", "Secondary Pointerover"), + new ("SemiColorSecondaryPressed", "Secondary Pressed"), + new ("SemiColorSecondaryDisabled", "Secondary Disabled"), + new ("SemiColorSecondaryLight", "Secondary Light"), + new ("SemiColorSecondaryLightPointerover", "Secondary Light Pointerover"), + new ("SemiColorSecondaryLightActive", "Secondary Light Active"), + }; + + public static IReadOnlyList> TertiaryTokens { get; } = new List> + { + new ("SemiColorTertiary", "Tertiary"), + new ("SemiColorTertiaryPointerover", "Tertiary Pointerover"), + new ("SemiColorTertiaryPressed", "Tertiary Pressed"), + new ("SemiColorTertiaryLight", "Tertiary Light"), + new ("SemiColorTertiaryLightPointerover", "Tertiary Light Pointerover"), + new ("SemiColorTertiaryLightActive", "Tertiary Light Active"), + }; + + public static IReadOnlyList> InformationTokens { get; } = new List> + { + new ("SemiColorInformation", "Information"), + new ("SemiColorInformationPointerover", "Information Pointerover"), + new ("SemiColorInformationPressed", "Information Pressed"), + new ("SemiColorInformationDisabled", "Information Disabled"), + new ("SemiColorInformationLight", "Information Light"), + new ("SemiColorInformationLightPointerover", "Information Light Pointerover"), + new ("SemiColorInformationLightActive", "Information Light Active"), + }; + + public static IReadOnlyList> SuccessTokens { get; } = new List> + { + new ("SemiColorSuccess", "Success"), + new ("SemiColorSuccessPointerover", "Success Pointerover"), + new ("SemiColorSuccessPressed", "Success Pressed"), + new ("SemiColorSuccessDisabled", "Success Disabled"), + new ("SemiColorSuccessLight", "Success Light"), + new ("SemiColorSuccessLightPointerover", "Success Light Pointerover"), + new ("SemiColorSuccessLightActive", "Success Light Active"), + }; + + public static IReadOnlyList> WarningTokens { get; } = new List> + { + new ("SemiColorWarning", "Warning"), + new ("SemiColorWarningPointerover", "Warning Pointerover"), + new ("SemiColorWarningPressed", "Warning Pressed"), + new ("SemiColorWarningLight", "Warning Light"), + new ("SemiColorWarningLightPointerover", "Warning Light Pointerover"), + new ("SemiColorWarningLightActive", "Warning Light Active"), + }; + + public static IReadOnlyList> DangerTokens { get; } = new List> + { + new ("SemiColorDanger", "Danger"), + new ("SemiColorDangerPointerover", "Danger Pointerover"), + new ("SemiColorDangerPressed", "Danger Pressed"), + new ("SemiColorDangerLight", "Danger Light"), + new ("SemiColorDangerLightPointerover", "Danger Light Pointerover"), + new ("SemiColorDangerLightActive", "Danger Light Active"), + }; + + public static IReadOnlyList> TextTokens { get; } = new List> + { + new ("SemiColorText0", "Text 0"), + new ("SemiColorText1", "Text 1"), + new ("SemiColorText2", "Text 2"), + new ("SemiColorText3", "Text 3"), + }; + + public static IReadOnlyList> LinkTokens { get; } = new List> + { + new ("SemiColorLink", "Link"), + new ("SemiColorLinkPointerover", "Link Pointerover"), + new ("SemiColorLinkActive", "Link Active"), + new ("SemiColorLinkVisited", "Link Visited"), + }; + + public static IReadOnlyList> BackgroundTokens { get; } = new List> + { + new ("SemiColorBackground0", "Background 0"), + new ("SemiColorBackground1", "Background 1"), + new ("SemiColorBackground2", "Background 2"), + new ("SemiColorBackground3", "Background 3"), + new ("SemiColorBackground4", "Background 4"), + }; + + public static IReadOnlyList> FillTokens { get; } = new List> + { + new ("SemiColorFill0", "Fill 0"), + new ("SemiColorFill1", "Fill 1"), + new ("SemiColorFill2", "Fill 2"), + }; + + public static IReadOnlyList> BorderTokens { get; } = new List> + { + new ("SemiColorBorder", "Border"), + }; + + public static IReadOnlyList> DisabledTokens { get; } = new List> + { + new ("SemiColorDisabledText", "Disabled Text"), + new ("SemiColorDisabledBorder", "Disabled Border"), + new ("SemiColorDisabledBackground", "Disabled Background"), + new ("SemiColorDisabledFill", "Disabled Fill"), + }; + +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo/Views/MainView.axaml b/demo/Semi.Avalonia.Demo/Views/MainView.axaml index 0074644..5633d11 100644 --- a/demo/Semi.Avalonia.Demo/Views/MainView.axaml +++ b/demo/Semi.Avalonia.Demo/Views/MainView.axaml @@ -56,6 +56,9 @@ + + + diff --git a/src/Semi.Avalonia.DataGrid/Dark.axaml b/src/Semi.Avalonia.DataGrid/Dark.axaml index 1814448..ad74cb4 100644 --- a/src/Semi.Avalonia.DataGrid/Dark.axaml +++ b/src/Semi.Avalonia.DataGrid/Dark.axaml @@ -29,8 +29,8 @@ - - + + M7.43934 19.7957C6.85355 19.2099 6.85355 18.2601 7.43934 17.6744L13.0962 12.0175L7.43934 6.36065C6.85355 5.77486 6.85355 4.82511 7.43934 4.23933C8.02513 3.65354 8.97487 3.65354 9.56066 4.23933L16.2782 10.9568C16.864 11.5426 16.864 12.4924 16.2782 13.0782L9.56066 19.7957C8.97487 20.3815 8.02513 20.3815 7.43934 19.7957Z diff --git a/src/Semi.Avalonia/Controls/ListBox.axaml b/src/Semi.Avalonia/Controls/ListBox.axaml index c01249d..88b3ac6 100644 --- a/src/Semi.Avalonia/Controls/ListBox.axaml +++ b/src/Semi.Avalonia/Controls/ListBox.axaml @@ -80,6 +80,9 @@ diff --git a/src/Semi.Avalonia/Controls/ScrollViewer.axaml b/src/Semi.Avalonia/Controls/ScrollViewer.axaml index aadb4ba..4372c99 100644 --- a/src/Semi.Avalonia/Controls/ScrollViewer.axaml +++ b/src/Semi.Avalonia/Controls/ScrollViewer.axaml @@ -147,12 +147,12 @@ +