diff --git a/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.axaml b/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.axaml
new file mode 100644
index 0000000..479f9ba
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Controls/ColorItemControl.axaml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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/Pages/PaletteDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml
index 7ec3669..c90235e 100644
--- a/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml
+++ b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml
@@ -2,6 +2,7 @@
x:Class="Semi.Avalonia.Demo.Pages.PaletteDemo"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
@@ -11,6 +12,13 @@
+
+
+
+
+
+
+
-
-
-
+
+
+
+
@@ -41,29 +54,56 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj b/demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj
index 545f3dc..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/ViewModels/PaletteDemoViewModel.cs b/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs
index 515c832..8cf0939 100644
--- a/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs
+++ b/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs
@@ -4,30 +4,61 @@ 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 string[] _colors = { "Amber","Blue","Cyan","Green","Grey","Indigo","LightBlue","LightGreen","Lime","Orange","Pink","Purple","Red","Teal","Violet","Yellow" };
- private ObservableCollection _series;
+ private ObservableCollection _lightSeries;
- public ObservableCollection Series
+ private ColorItemViewModel _selectedColor;
+
+ public ColorItemViewModel SelectedColor
{
- get => _series;
- set => SetProperty(ref _series, value);
+ get => _selectedColor;
+ set => SetProperty(ref _selectedColor, value);
+ }
+
+ public ObservableCollection LightSeries
+ {
+ get => _lightSeries;
+ set => SetProperty(ref _lightSeries, value);
+ }
+
+ private ObservableCollection _darkSeries;
+
+ public ObservableCollection DarkSeries
+ {
+ get => _darkSeries;
+ set => SetProperty(ref _darkSeries, value);
}
public PaletteDemoViewModel()
{
- Series = new ObservableCollection();
- var resouceDictionary = (ResourceDictionary)(AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Light/Palette.axaml")));
+ LightSeries = new ObservableCollection();
+ var lightResourceDictionary = (ResourceDictionary)(AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Light/Palette.axaml")));
foreach (var color in _colors)
{
ColorSeries s = new ColorSeries();
- s.Initialize(resouceDictionary, color);
- Series.Add(s);
+ s.Initialize(lightResourceDictionary, color, true);
+ LightSeries.Add(s);
}
+ DarkSeries = new ObservableCollection();
+ var darkResouceDictionary = (ResourceDictionary)(AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Dark/Palette.axaml")));
+ foreach (var color in _colors)
+ {
+ ColorSeries s = new ColorSeries();
+ s.Initialize(darkResouceDictionary, color, false);
+ DarkSeries.Add(s);
+ }
+ WeakReferenceMessenger.Default.Register(this, OnClickColorItem);
+ }
+
+ private void OnClickColorItem(PaletteDemoViewModel vm, ColorItemViewModel item)
+ {
+ SelectedColor = item;
}
}
@@ -49,7 +80,7 @@ public class ColorSeries: ObservableObject
set => SetProperty(ref _seriesName, value);
}
- internal void Initialize(IResourceDictionary resourceDictionary, string color)
+ internal void Initialize(IResourceDictionary resourceDictionary, string color, bool light)
{
SeriesName = color;
Color = new ObservableCollection();
@@ -62,7 +93,7 @@ public class ColorSeries: ObservableObject
if (value is SolidColorBrush brush)
{
string name = color + " " + i;
- var item = new ColorItemViewModel(name, brush, key);
+ var item = new ColorItemViewModel(name, brush, key, light, i);
Color.Add(item);
}
}
@@ -79,6 +110,13 @@ public class ColorItemViewModel : ObservableObject
get => _color;
set => SetProperty(ref _color, value);
}
+
+ private IBrush _textColor;
+ public IBrush TextColor
+ {
+ get => _textColor;
+ set => SetProperty(ref _textColor, value);
+ }
private string _name;
public string Name
@@ -94,11 +132,28 @@ public class ColorItemViewModel : ObservableObject
get => _resourceKey;
set => SetProperty(ref _resourceKey, value);
}
+
+ private string _hex;
+
+ public string Hex
+ {
+ get => _hex;
+ set => SetProperty(ref _hex, value);
+ }
- public ColorItemViewModel(string name, IBrush color, string resourceKey)
+ public ColorItemViewModel(string name, IBrush color, string resourceKey, bool light, int index)
{
Name = name;
Color = color;
ResourceKey = resourceKey;
+ Hex = color.ToString().ToUpperInvariant();
+ if ((light && index < 5) || (!light && index > 5))
+ {
+ TextColor = Brushes.Black;
+ }
+ else
+ {
+ TextColor = Brushes.White;
+ }
}
}
\ No newline at end of file