diff --git a/Toolkit.Avalonia/ContentDialogHandler.cs b/Toolkit.Avalonia/ContentDialogHandler.cs index 8eafbb2..ccd6493 100644 --- a/Toolkit.Avalonia/ContentDialogHandler.cs +++ b/Toolkit.Avalonia/ContentDialogHandler.cs @@ -4,7 +4,7 @@ using Toolkit.UI.Controls.Avalonia; namespace Toolkit.Avalonia; -public class ContentDialogHandler(IDispatcher dispatcher) : +public class ContentDialogHandler : INotificationHandler> { public async Task Handle(NavigateEventArgs args) @@ -83,7 +83,7 @@ public class ContentDialogHandler(IDispatcher dispatcher) : { await deactivating.OnDeactivating(); } - } + } } } } diff --git a/Toolkit.Avalonia/FileProvider.cs b/Toolkit.Avalonia/FileProvider.cs index 6f50c58..bd6d31a 100644 --- a/Toolkit.Avalonia/FileProvider.cs +++ b/Toolkit.Avalonia/FileProvider.cs @@ -23,9 +23,9 @@ public class FileProvider(ITopLevelProvider topLevelProvider) : } }); - return storageFiles.Select(file => file.Path.LocalPath).ToList(); + return storageFiles.Select(file => file.Path.LocalPath).ToList(); } return Array.Empty(); } -} +} \ No newline at end of file diff --git a/Toolkit.Avalonia/FrameHandler.cs b/Toolkit.Avalonia/FrameHandler.cs index b7b5867..97e0264 100644 --- a/Toolkit.Avalonia/FrameHandler.cs +++ b/Toolkit.Avalonia/FrameHandler.cs @@ -133,7 +133,7 @@ public class FrameHandler : if (args.Parameters is not null) { - if (args.Parameters.TryGetValue("Transition", + if (args.Parameters.TryGetValue("Transition", out object? transition)) { switch ($"{transition}") @@ -142,6 +142,7 @@ public class FrameHandler : navigationOptions.TransitionInfoOverride = new SuppressNavigationTransitionInfo(); break; + case "FromLeft": case "FromRight": case "FromTop": @@ -155,7 +156,7 @@ public class FrameHandler : } } - if (args.Parameters.TryGetValue("IsBackStackEnabled", + if (args.Parameters.TryGetValue("IsBackStackEnabled", out object? isBackStackEnabled)) { if (isBackStackEnabled is bool value) @@ -164,7 +165,7 @@ public class FrameHandler : } } - if (args.Parameters.TryGetValue("ClearBackStack", + if (args.Parameters.TryGetValue("ClearBackStack", out object? clearBackStack)) { if (clearBackStack is bool clearBool) @@ -177,7 +178,7 @@ public class FrameHandler : if (clearBackStack is string clearString) { - if (clearString.StartsWith('[') && clearString.EndsWith(']') && + if (clearString.StartsWith('[') && clearString.EndsWith(']') && clearString.Contains('-')) { string range = clearString.Trim('[', ']'); @@ -197,7 +198,7 @@ public class FrameHandler : { postNavigateActions.Add(() => CleanUp(1, frame.BackStack.Count)); } - } + } } } diff --git a/Toolkit.Avalonia/IImageResizer.cs b/Toolkit.Avalonia/IImageResizer.cs index 2a7187a..ad1bc8b 100644 --- a/Toolkit.Avalonia/IImageResizer.cs +++ b/Toolkit.Avalonia/IImageResizer.cs @@ -8,4 +8,4 @@ public interface IImageResizer int targetWidth, int targetHeight, bool maintainAspectRatio); -} +} \ No newline at end of file diff --git a/Toolkit.Avalonia/IServiceCollectionExtensions.cs b/Toolkit.Avalonia/IServiceCollectionExtensions.cs index ef6a619..dba5703 100644 --- a/Toolkit.Avalonia/IServiceCollectionExtensions.cs +++ b/Toolkit.Avalonia/IServiceCollectionExtensions.cs @@ -129,7 +129,7 @@ public static class IServiceCollectionExtensions services.AddTransient(); - services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/Toolkit.Avalonia/ITopLevelProvider.cs b/Toolkit.Avalonia/ITopLevelProvider.cs index 5136c8d..58a5d04 100644 --- a/Toolkit.Avalonia/ITopLevelProvider.cs +++ b/Toolkit.Avalonia/ITopLevelProvider.cs @@ -5,4 +5,4 @@ namespace Toolkit.Avalonia; public interface ITopLevelProvider { TopLevel? Get(); -} +} \ No newline at end of file diff --git a/Toolkit.Avalonia/ImageReader.cs b/Toolkit.Avalonia/ImageReader.cs index eee333c..42fbf31 100644 --- a/Toolkit.Avalonia/ImageReader.cs +++ b/Toolkit.Avalonia/ImageReader.cs @@ -3,15 +3,15 @@ using Toolkit.Foundation; namespace Toolkit.Avalonia; -public class ImageReader(IImageResizer imageResizer) : +public class ImageReader(IImageResizer imageResizer) : IImageReader { - public IImageDescriptor Get(Stream stream, - int width, - int height, + public IImageDescriptor Get(Stream stream, + int width, + int height, bool maintainAspectRatio) { Bitmap resizedImage = imageResizer.Resize(stream, width, height, maintainAspectRatio); return new ImageDescriptor(resizedImage, width, height); } -} +} \ No newline at end of file diff --git a/Toolkit.Avalonia/ImageWriter.cs b/Toolkit.Avalonia/ImageWriter.cs index 4f48486..09465f1 100644 --- a/Toolkit.Avalonia/ImageWriter.cs +++ b/Toolkit.Avalonia/ImageWriter.cs @@ -14,4 +14,4 @@ public class ImageWriter : bitmap.Save(stream); } } -} +} \ No newline at end of file diff --git a/Toolkit.Avalonia/TopLevelProvider.cs b/Toolkit.Avalonia/TopLevelProvider.cs index af35ad2..752a738 100644 --- a/Toolkit.Avalonia/TopLevelProvider.cs +++ b/Toolkit.Avalonia/TopLevelProvider.cs @@ -27,4 +27,4 @@ public class TopLevelProvider : return default; } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/Activation.cs b/Toolkit.Foundation/Activation.cs index bcec601..ade3931 100644 --- a/Toolkit.Foundation/Activation.cs +++ b/Toolkit.Foundation/Activation.cs @@ -6,4 +6,4 @@ public record Activation public static ActivationEventArgs As() => new(); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ActivationBuilder.cs b/Toolkit.Foundation/ActivationBuilder.cs index deb8498..cefef3e 100644 --- a/Toolkit.Foundation/ActivationBuilder.cs +++ b/Toolkit.Foundation/ActivationBuilder.cs @@ -1,3 +1,3 @@ namespace Toolkit.Foundation; -public record ActivationBuilder(IActivation Value, object? Key = null); +public record ActivationBuilder(IActivation Value, object? Key = null); \ No newline at end of file diff --git a/Toolkit.Foundation/Cache.cs b/Toolkit.Foundation/Cache.cs index d649dbf..789d4ba 100644 --- a/Toolkit.Foundation/Cache.cs +++ b/Toolkit.Foundation/Cache.cs @@ -193,6 +193,7 @@ public class Cache(IComparer comparer) : value = default; return false; } + private class KeyValuePairComparer(IComparer comparer) : IComparer> { diff --git a/Toolkit.Foundation/ChangedEventArgs.cs b/Toolkit.Foundation/ChangedEventArgs.cs index 85c75a3..5e6c1c7 100644 --- a/Toolkit.Foundation/ChangedEventArgs.cs +++ b/Toolkit.Foundation/ChangedEventArgs.cs @@ -1,3 +1,3 @@ namespace Toolkit.Foundation; -public record ChangedEventArgs(TSender? Sender = default); +public record ChangedEventArgs(TSender? Sender = default); \ No newline at end of file diff --git a/Toolkit.Foundation/Close.cs b/Toolkit.Foundation/Close.cs index 3cc0cb3..bfa1f05 100644 --- a/Toolkit.Foundation/Close.cs +++ b/Toolkit.Foundation/Close.cs @@ -5,4 +5,4 @@ public record Close public static CloseEventArgs As(TSender sender) => new(sender); public static CloseEventArgs As() where TSender : new() => new(new TSender()); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/Component.cs b/Toolkit.Foundation/Component.cs index 47934f9..f36c579 100644 --- a/Toolkit.Foundation/Component.cs +++ b/Toolkit.Foundation/Component.cs @@ -2,13 +2,12 @@ namespace Toolkit.Foundation; - public class Component : IComponent { private readonly IComponentBuilder builder; - protected Component(IComponentBuilder builder) => + protected Component(IComponentBuilder builder) => this.builder = builder; public static TComponent? Create(IServiceProvider provider, diff --git a/Toolkit.Foundation/ContentFactory.cs b/Toolkit.Foundation/ContentFactory.cs index eb9c585..e34b782 100644 --- a/Toolkit.Foundation/ContentFactory.cs +++ b/Toolkit.Foundation/ContentFactory.cs @@ -3,7 +3,7 @@ public class ContentFactory(IServiceProvider provider, IServiceFactory factory) : IContentFactory { - public Task CreateAsync(IContentTemplateDescriptor descriptor, + public Task CreateAsync(IContentTemplateDescriptor descriptor, object[] parameters) { object? content = parameters is { Length: > 0 } @@ -24,4 +24,4 @@ public class ContentFactory(IServiceProvider provider, return Task.FromResult(content); } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/CreateEventArgs.cs b/Toolkit.Foundation/CreateEventArgs.cs index 170b59e..4778dc5 100644 --- a/Toolkit.Foundation/CreateEventArgs.cs +++ b/Toolkit.Foundation/CreateEventArgs.cs @@ -1,4 +1,4 @@ namespace Toolkit.Foundation; -public record CreateEventArgs(TSender? Sender = default, +public record CreateEventArgs(TSender? Sender = default, params object[] Parameters); \ No newline at end of file diff --git a/Toolkit.Foundation/Delete.cs b/Toolkit.Foundation/Delete.cs index 916dd25..5937231 100644 --- a/Toolkit.Foundation/Delete.cs +++ b/Toolkit.Foundation/Delete.cs @@ -7,4 +7,4 @@ public record Delete public static DeleteEventArgs As() where TSender : new() => new(new TSender()); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/FileFilter.cs b/Toolkit.Foundation/FileFilter.cs index e37c437..e2c711e 100644 --- a/Toolkit.Foundation/FileFilter.cs +++ b/Toolkit.Foundation/FileFilter.cs @@ -1,3 +1,3 @@ namespace Toolkit.Foundation; -public record FileFilter(string Name, List Extensions, bool AllowMultiple = false); +public record FileFilter(string Name, List Extensions, bool AllowMultiple = false); \ No newline at end of file diff --git a/Toolkit.Foundation/IClipboardWriter.cs b/Toolkit.Foundation/IClipboardWriter.cs index 331ac4c..0132e28 100644 --- a/Toolkit.Foundation/IClipboardWriter.cs +++ b/Toolkit.Foundation/IClipboardWriter.cs @@ -3,4 +3,4 @@ public interface IClipboardWriter { Task Write(TContent content); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ICollectionSynchronizationExtensions.cs b/Toolkit.Foundation/ICollectionSynchronizationExtensions.cs index c368e40..cc3abbd 100644 --- a/Toolkit.Foundation/ICollectionSynchronizationExtensions.cs +++ b/Toolkit.Foundation/ICollectionSynchronizationExtensions.cs @@ -4,4 +4,4 @@ public static class ICollectionSynchronizationExtensions { public static int IndexOf(this ICollectionSynchronization synchronization, TItem item) => synchronization is IList collection ? collection.IndexOf(item) : -1; -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IComponentFactory.cs b/Toolkit.Foundation/IComponentFactory.cs index 82e4f72..928e3f6 100644 --- a/Toolkit.Foundation/IComponentFactory.cs +++ b/Toolkit.Foundation/IComponentFactory.cs @@ -5,7 +5,7 @@ namespace Toolkit.Foundation; public interface IComponentFactory { IComponentHost? Create(string name, - TConfiguration? configuration = null, + TConfiguration? configuration = null, Action? servicesDelegate = null) where TComponent : IComponent where TConfiguration : ComponentConfiguration, new(); diff --git a/Toolkit.Foundation/IContentFactory.cs b/Toolkit.Foundation/IContentFactory.cs index 25c9ea9..4706a4c 100644 --- a/Toolkit.Foundation/IContentFactory.cs +++ b/Toolkit.Foundation/IContentFactory.cs @@ -1,9 +1,8 @@ - -namespace Toolkit.Foundation +namespace Toolkit.Foundation { public interface IContentFactory { - Task CreateAsync(IContentTemplateDescriptor descriptor, + Task CreateAsync(IContentTemplateDescriptor descriptor, object[] resolvedArguments); } } \ No newline at end of file diff --git a/Toolkit.Foundation/IHostBuilderExtension.cs b/Toolkit.Foundation/IHostBuilderExtension.cs index 82673cf..a73b20c 100644 --- a/Toolkit.Foundation/IHostBuilderExtension.cs +++ b/Toolkit.Foundation/IHostBuilderExtension.cs @@ -96,7 +96,7 @@ public static class IHostBuilderExtension sections.Add(section); } } - + foreach (string section in sections) { if (context.Properties.TryGetValue(section, out object? value)) @@ -112,7 +112,7 @@ public static class IHostBuilderExtension configurations.Add(typeof(TConfiguration)); } } - } + } else { context.Properties.Add(section, new List { typeof(TConfiguration) }); diff --git a/Toolkit.Foundation/IImageDescriptor.cs b/Toolkit.Foundation/IImageDescriptor.cs index 2e29ed5..328b06e 100644 --- a/Toolkit.Foundation/IImageDescriptor.cs +++ b/Toolkit.Foundation/IImageDescriptor.cs @@ -7,4 +7,4 @@ public interface IImageDescriptor public int Width { get; } public int Height { get; } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IImageReader.cs b/Toolkit.Foundation/IImageReader.cs index f156209..465b169 100644 --- a/Toolkit.Foundation/IImageReader.cs +++ b/Toolkit.Foundation/IImageReader.cs @@ -2,8 +2,8 @@ public interface IImageReader { - IImageDescriptor Get(Stream stream, - int width, - int height, + IImageDescriptor Get(Stream stream, + int width, + int height, bool maintainAspectRatio = false); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IIndexed.cs b/Toolkit.Foundation/IIndexed.cs index 43f70d3..c25bb5c 100644 --- a/Toolkit.Foundation/IIndexed.cs +++ b/Toolkit.Foundation/IIndexed.cs @@ -3,4 +3,4 @@ public interface IIndexed { public int Index { get; } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IInitialization.cs b/Toolkit.Foundation/IInitialization.cs index 3e08677..c317689 100644 --- a/Toolkit.Foundation/IInitialization.cs +++ b/Toolkit.Foundation/IInitialization.cs @@ -3,4 +3,4 @@ public interface IInitialization { void Initialize(); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IPrimaryConfirmation.cs b/Toolkit.Foundation/IPrimaryConfirmation.cs index aabfe13..1e5726a 100644 --- a/Toolkit.Foundation/IPrimaryConfirmation.cs +++ b/Toolkit.Foundation/IPrimaryConfirmation.cs @@ -3,4 +3,4 @@ public interface IPrimaryConfirmation { Task ConfirmPrimary(); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IServiceCollectionExtensions.cs b/Toolkit.Foundation/IServiceCollectionExtensions.cs index 47e50aa..88e4bcf 100644 --- a/Toolkit.Foundation/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/IServiceCollectionExtensions.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; + public static class IServiceCollectionExtensions { public static IServiceCollection AddCache(this IServiceCollection services) @@ -37,7 +38,7 @@ public static class IServiceCollectionExtensions } public static IServiceCollection AddHandler(this IServiceCollection services, - ServiceLifetime lifetime = ServiceLifetime.Transient, + ServiceLifetime lifetime = ServiceLifetime.Transient, string? key = null) where THandler : IHandler { diff --git a/Toolkit.Foundation/IServiceProviderExtensions.cs b/Toolkit.Foundation/IServiceProviderExtensions.cs index b32a901..dd15973 100644 --- a/Toolkit.Foundation/IServiceProviderExtensions.cs +++ b/Toolkit.Foundation/IServiceProviderExtensions.cs @@ -4,9 +4,9 @@ namespace Toolkit.Foundation; public static class IServiceProviderExtensions { - public static object GetRequiredKeyedService(this IServiceProvider provider, - Type serviceType, - Action serviceDelegate, + public static object GetRequiredKeyedService(this IServiceProvider provider, + Type serviceType, + Action serviceDelegate, object? serviceKey) { object service = provider.GetRequiredKeyedService(serviceType, serviceKey); @@ -14,4 +14,4 @@ public static class IServiceProviderExtensions return service; } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/IValidation.cs b/Toolkit.Foundation/IValidation.cs index 3cbacf7..cff43fc 100644 --- a/Toolkit.Foundation/IValidation.cs +++ b/Toolkit.Foundation/IValidation.cs @@ -3,7 +3,7 @@ using System.Linq.Expressions; namespace Toolkit.Foundation; -public interface IValidation : +public interface IValidation : INotifyPropertyChanged { IReadOnlyDictionary Errors { get; } diff --git a/Toolkit.Foundation/IValidatorCollection.cs b/Toolkit.Foundation/IValidatorCollection.cs index 324524c..f2dfb16 100644 --- a/Toolkit.Foundation/IValidatorCollection.cs +++ b/Toolkit.Foundation/IValidatorCollection.cs @@ -8,4 +8,4 @@ public interface IValidatorCollection : void Add(string key, Validator binder); bool TryGet(string key, [MaybeNull] out Validator? value); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/Mediator.cs b/Toolkit.Foundation/Mediator.cs index 9e2dda7..de1dbfc 100644 --- a/Toolkit.Foundation/Mediator.cs +++ b/Toolkit.Foundation/Mediator.cs @@ -30,7 +30,7 @@ public class Mediator(IHandlerProvider handlerProvider, return default; } - public async Task Handle(Type responseType, + public async Task Handle(Type responseType, object message, object? key = null, CancellationToken cancellationToken = default) @@ -57,7 +57,7 @@ public class Mediator(IHandlerProvider handlerProvider, return default; } - public async Task> HandleMany(Type responseType, + public async Task> HandleMany(Type responseType, object message, object? key = null, CancellationToken cancellationToken = default) @@ -97,7 +97,7 @@ public class Mediator(IHandlerProvider handlerProvider, List handlers = GetHandlers(message, handlerType, key); foreach (object? handler in handlers) { - MethodInfo? handleMethod = handler?.GetType().GetMethod("Handle", + MethodInfo? handleMethod = handler?.GetType().GetMethod("Handle", [messageType, typeof(CancellationToken)]); if (handleMethod is not null) @@ -127,7 +127,7 @@ public class Mediator(IHandlerProvider handlerProvider, } } - private List GetHandlers(object message, + private List GetHandlers(object message, Type handlerWrapperType, object? key) { @@ -151,7 +151,7 @@ public class Mediator(IHandlerProvider handlerProvider, } } - IEnumerable keyedServices = key is not null ? provider.GetKeyedServices(handlerWrapperType, key) : + IEnumerable keyedServices = key is not null ? provider.GetKeyedServices(handlerWrapperType, key) : provider.GetServices(handlerWrapperType); AddHandlers(keyedServices); @@ -160,5 +160,4 @@ public class Mediator(IHandlerProvider handlerProvider, return handlers.SelectMany(entry => entry.Value).ToList(); } - } \ No newline at end of file diff --git a/Toolkit.Foundation/MediatorExtensions.cs b/Toolkit.Foundation/MediatorExtensions.cs index c2b6344..e6965fb 100644 --- a/Toolkit.Foundation/MediatorExtensions.cs +++ b/Toolkit.Foundation/MediatorExtensions.cs @@ -2,5 +2,4 @@ public static class MediatorExtensions { - -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/NavigateBackHandler.cs b/Toolkit.Foundation/NavigateBackHandler.cs index 4405242..69534a4 100644 --- a/Toolkit.Foundation/NavigateBackHandler.cs +++ b/Toolkit.Foundation/NavigateBackHandler.cs @@ -10,7 +10,7 @@ public class NavigateBackHandler(IComponentScopeProvider provider) : if (provider.Get(args.Scope ?? "Root") is ComponentScopeDescriptor descriptor) { - if (descriptor?.Services?.GetService() is + if (descriptor?.Services?.GetService() is INavigation navigationScope) { navigationScope.Back(args.Context); diff --git a/Toolkit.Foundation/Navigation.cs b/Toolkit.Foundation/Navigation.cs index 5b0875c..7de1453 100644 --- a/Toolkit.Foundation/Navigation.cs +++ b/Toolkit.Foundation/Navigation.cs @@ -27,7 +27,7 @@ public class Navigation(IServiceProvider provider, { currentSegmentIndex++; - if (provider.GetKeyedService(segment) + if (provider.GetKeyedService(segment) is IContentTemplateDescriptor descriptor) { Dictionary? arguments = parameters?.ToDictionary(x => x.Key, x => x.Value, StringComparer.InvariantCultureIgnoreCase) ?? []; diff --git a/Toolkit.Foundation/NotificationAttribute.cs b/Toolkit.Foundation/NotificationAttribute.cs index 18a0cd6..00c7d47 100644 --- a/Toolkit.Foundation/NotificationAttribute.cs +++ b/Toolkit.Foundation/NotificationAttribute.cs @@ -1,6 +1,5 @@ namespace Toolkit.Foundation; - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] public class NotificationAttribute(Type type, object key) : Attribute diff --git a/Toolkit.Foundation/ObjectExtensions.cs b/Toolkit.Foundation/ObjectExtensions.cs index d2109be..3ffcf4c 100644 --- a/Toolkit.Foundation/ObjectExtensions.cs +++ b/Toolkit.Foundation/ObjectExtensions.cs @@ -8,7 +8,7 @@ public static class ObjectExtensions { Type type = obj.GetType(); - object? key = selector(); + object? key = selector(); if (type.GetProperty($"{key}") is PropertyInfo property && property.GetValue(obj) is { } value) { return value; diff --git a/Toolkit.Foundation/Observable.cs b/Toolkit.Foundation/Observable.cs index 5fdcda6..e6a044e 100644 --- a/Toolkit.Foundation/Observable.cs +++ b/Toolkit.Foundation/Observable.cs @@ -76,7 +76,6 @@ public partial class Observable(IServiceProvider provider, public virtual void OnInitialize() { - } public virtual void Initialize() @@ -129,10 +128,9 @@ public partial class Observable : protected virtual void OnValueChanged() { - } - partial void OnValueChanged(TValue? value) => OnValueChanged(); + private partial void OnValueChanged(TValue? value) => OnValueChanged(); } public partial class Observable : @@ -148,8 +146,8 @@ public partial class Observable : public Observable(IServiceProvider provider, IServiceFactory factory, IMediator mediator, - IPublisher publisher, - ISubscriber subscriber, + IPublisher publisher, + ISubscriber subscriber, IDisposer disposer, TKey key, TValue? value = default) : base(provider, factory, mediator, publisher, subscriber, disposer) @@ -160,8 +158,7 @@ public partial class Observable : protected virtual void OnValueChanged() { - } - partial void OnValueChanged(TValue? value) => OnValueChanged(); + private partial void OnValueChanged(TValue? value) => OnValueChanged(); } \ No newline at end of file diff --git a/Toolkit.Foundation/ObservableCollection.cs b/Toolkit.Foundation/ObservableCollection.cs index 029dcf8..2017183 100644 --- a/Toolkit.Foundation/ObservableCollection.cs +++ b/Toolkit.Foundation/ObservableCollection.cs @@ -146,7 +146,7 @@ public partial class ObservableCollection : private Func? defaultSelectionFactory; - public void SetSource(IList source, + public void SetSource(IList source, Func? defaultSelectionFactory) { foreach (TItem item in source) @@ -167,7 +167,7 @@ public partial class ObservableCollection : } } - private void SourceCollectionChanged(object? sender, + private void SourceCollectionChanged(object? sender, NotifyCollectionChangedEventArgs args) { switch (args.Action) @@ -181,6 +181,7 @@ public partial class ObservableCollection : } } break; + case NotifyCollectionChangedAction.Remove: if (args.OldItems is not null) { @@ -193,6 +194,7 @@ public partial class ObservableCollection : } } break; + case NotifyCollectionChangedAction.Reset: Clear(); @@ -263,7 +265,6 @@ public partial class ObservableCollection : } catch (InvalidCastException) { - } Add(item!); @@ -296,7 +297,6 @@ public partial class ObservableCollection : Disposer.Dispose(item); Disposer.Remove(this, item); } - } ClearItems(); @@ -351,7 +351,7 @@ public partial class ObservableCollection : Disposer.Dispose(this); } - public void Activate(Func aggregateDelegate, + public void Activate(Func aggregateDelegate, bool reset = false) { if (reset) @@ -501,7 +501,6 @@ public partial class ObservableCollection : public virtual void OnInitialize() { - } public virtual void Initialize() @@ -722,7 +721,7 @@ public partial class ObservableCollection : CollectionChanged?.Invoke(this, args); } - partial void OnIsActivatedChanged(bool value) + private partial void OnIsActivatedChanged(bool value) { if (value) { @@ -734,7 +733,7 @@ public partial class ObservableCollection : } } - partial void OnSelectedItemChanged(TItem? oldValue, TItem? newValue) + private partial void OnSelectedItemChanged(TItem? oldValue, TItem? newValue) { if (oldValue is ISelectable oldSelection) { @@ -749,10 +748,9 @@ public partial class ObservableCollection : Publisher.Publish(Selection.As(SelectedItem)); OnSelectedItemChanged(); } - + protected virtual void OnSelectedItemChanged() { - } private void UpdateSelection(TItem item) @@ -776,7 +774,7 @@ public partial class ObservableCollection(IServiceProvider p IServiceFactory factory, IMediator mediator, IPublisher publisher, - ISubscriber subscriber, + ISubscriber subscriber, IDisposer disposer, TValue value) : ObservableCollection(provider, factory, mediator, publisher, subscriber, disposer) where TViewModel : notnull, IDisposable @@ -786,25 +784,24 @@ public partial class ObservableCollection(IServiceProvider p protected virtual void OnValueChanged() { - } - partial void OnValueChanged(TValue value) => OnValueChanged(); + private partial void OnValueChanged(TValue value) => OnValueChanged(); } -public partial class ObservableCollection : +public partial class ObservableCollection : ObservableCollection where TViewModel : notnull, IDisposable where TKey : notnull - { +{ [ObservableProperty] private TKey key; [ObservableProperty] private TValue value; - public ObservableCollection(IServiceProvider provider, - IServiceFactory factory, + public ObservableCollection(IServiceProvider provider, + IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, @@ -820,8 +817,8 @@ public partial class ObservableCollection : IServiceFactory factory, IMediator mediator, IPublisher publisher, - ISubscriber subscriber, - IDisposer disposer, + ISubscriber subscriber, + IDisposer disposer, IEnumerable items, TKey key, TValue value) : base(provider, factory, mediator, publisher, subscriber, disposer, items) @@ -832,13 +829,12 @@ public partial class ObservableCollection : protected virtual void OnValueChanged() { - } - partial void OnValueChanged(TValue value) => OnValueChanged(); + private partial void OnValueChanged(TValue value) => OnValueChanged(); } -public class ObservableCollection : +public class ObservableCollection : ObservableCollection { public ObservableCollection(IServiceProvider provider, diff --git a/Toolkit.Foundation/Open.cs b/Toolkit.Foundation/Open.cs index abdc27b..16078a6 100644 --- a/Toolkit.Foundation/Open.cs +++ b/Toolkit.Foundation/Open.cs @@ -5,4 +5,4 @@ public record Open public static OpenEventArgs As(TSender sender) => new(sender); public static OpenEventArgs As() where TSender : new() => new(new TSender()); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/OpenEventArgs.cs b/Toolkit.Foundation/OpenEventArgs.cs index 74fb9b9..74a0bce 100644 --- a/Toolkit.Foundation/OpenEventArgs.cs +++ b/Toolkit.Foundation/OpenEventArgs.cs @@ -1,3 +1,3 @@ namespace Toolkit.Foundation; -public record OpenEventArgs(TSender? Sender = default); +public record OpenEventArgs(TSender? Sender = default); \ No newline at end of file diff --git a/Toolkit.Foundation/Read.cs b/Toolkit.Foundation/Read.cs index ff3a77a..6449156 100644 --- a/Toolkit.Foundation/Read.cs +++ b/Toolkit.Foundation/Read.cs @@ -7,4 +7,4 @@ public class Read public static ReadEventArgs As() where TSender : new() => new(new TSender()); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ReadEventArgs.cs b/Toolkit.Foundation/ReadEventArgs.cs index b251204..4172b67 100644 --- a/Toolkit.Foundation/ReadEventArgs.cs +++ b/Toolkit.Foundation/ReadEventArgs.cs @@ -1,3 +1,3 @@ namespace Toolkit.Foundation; -public record ReadEventArgs(TSender? Sender = default); +public record ReadEventArgs(TSender? Sender = default); \ No newline at end of file diff --git a/Toolkit.Foundation/TupleExtensions.cs b/Toolkit.Foundation/TupleExtensions.cs index 4aeb138..6f68e90 100644 --- a/Toolkit.Foundation/TupleExtensions.cs +++ b/Toolkit.Foundation/TupleExtensions.cs @@ -19,6 +19,7 @@ public static class TupleExtensions (T3)Convert.ChangeType(parameters[2], typeof(T3)), (T4)Convert.ChangeType(parameters[3], typeof(T4)) ); + public static (T1, T2, T3, T4, T5) CreateValueTuple(this object[] parameters) => ( (T1)Convert.ChangeType(parameters[0], typeof(T1)), (T2)Convert.ChangeType(parameters[1], typeof(T2)), @@ -56,4 +57,4 @@ public static class TupleExtensions (T7)Convert.ChangeType(parameters[6], typeof(T7)), (T8)Convert.ChangeType(parameters[7], typeof(T8)) ); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/Validation.cs b/Toolkit.Foundation/Validation.cs index ed6f95e..2bab2e0 100644 --- a/Toolkit.Foundation/Validation.cs +++ b/Toolkit.Foundation/Validation.cs @@ -9,15 +9,16 @@ public class Validation(IValidatorCollection validators) : private readonly ValidationErrorCollection errors = []; public event PropertyChangedEventHandler? PropertyChanged; - public IReadOnlyDictionary Errors => + + public IReadOnlyDictionary Errors => errors.AsReadOnly(); - public bool HasErrors => + public bool HasErrors => Errors.Count > 0; internal IValidatorCollection Validators { get; } = validators; - public void Add(Expression> property, + public void Add(Expression> property, ValidationRule[] rules, ValidationTrigger trigger = ValidationTrigger.Deferred) { @@ -36,8 +37,7 @@ public class Validation(IValidatorCollection validators) : PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } - - public async Task Validate(Expression> property, + public async Task Validate(Expression> property, ValidationRule[] rules) { string? name = GetPropertyName(property); @@ -109,11 +109,13 @@ public class Validation(IValidatorCollection validators) : OnPropertyChanged(nameof(Errors), null, null); } } + private void Clear() { errors.Clear(); OnPropertyChanged(nameof(Errors), null, null); } + private string GetPropertyName(Expression> expression) { return expression.Body switch @@ -123,4 +125,4 @@ public class Validation(IValidatorCollection validators) : _ => string.Empty }; } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ValidationErrorCollection.cs b/Toolkit.Foundation/ValidationErrorCollection.cs index e551093..658574f 100644 --- a/Toolkit.Foundation/ValidationErrorCollection.cs +++ b/Toolkit.Foundation/ValidationErrorCollection.cs @@ -1,5 +1,5 @@ -using System.Collections.Specialized; -using System.Collections; +using System.Collections; +using System.Collections.Specialized; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; @@ -61,10 +61,10 @@ public class ValidationErrorCollection : } } - object? IDictionary.this[object key] - { + object? IDictionary.this[object key] + { get => ((IDictionary)items)[key]; - set => ((IDictionary)items)[key] = value; + set => ((IDictionary)items)[key] = value; } public void Add(string key, string value) @@ -73,7 +73,7 @@ public class ValidationErrorCollection : NotifyAdd(key, value); } - void ICollection>.Add(KeyValuePair item) => + void ICollection>.Add(KeyValuePair item) => Add(item.Key, item.Value); void IDictionary.Add(object key, object? value) => @@ -93,24 +93,24 @@ public class ValidationErrorCollection : bool ICollection>.Contains(KeyValuePair item) => items.Contains(item); - bool IDictionary.Contains(object key) => + bool IDictionary.Contains(object key) => ((IDictionary)items).Contains(key); public bool ContainsKey(string key) => items.ContainsKey(key); - public void CopyTo(KeyValuePair[] array, int arrayIndex) => + public void CopyTo(KeyValuePair[] array, int arrayIndex) => ((IDictionary)items).CopyTo(array, arrayIndex); - void ICollection.CopyTo(Array array, int index) => + void ICollection.CopyTo(Array array, int index) => ((ICollection)items).CopyTo(array, index); - public IEnumerator> GetEnumerator() => + public IEnumerator> GetEnumerator() => items.GetEnumerator(); - IEnumerator IEnumerable.GetEnumerator() => + IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator(); - IDictionaryEnumerator IDictionary.GetEnumerator() => + IDictionaryEnumerator IDictionary.GetEnumerator() => ((IDictionary)items).GetEnumerator(); public bool Remove(string key) @@ -131,10 +131,10 @@ public class ValidationErrorCollection : } } - public bool Contains(string key) => + public bool Contains(string key) => items.ContainsKey(key); - bool ICollection>.Remove(KeyValuePair item) => + bool ICollection>.Remove(KeyValuePair item) => Remove(item.Key); void IDictionary.Remove(object key) => Remove((string)key); @@ -146,7 +146,7 @@ public class ValidationErrorCollection : PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs($"Item[{key}]")); - CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, + CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, new[] { new KeyValuePair(key, value) }, -1)); } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ValidationRule.cs b/Toolkit.Foundation/ValidationRule.cs index c024ac4..f28ab4a 100644 --- a/Toolkit.Foundation/ValidationRule.cs +++ b/Toolkit.Foundation/ValidationRule.cs @@ -5,7 +5,7 @@ public class ValidationRule private readonly Func? syncValidation; private readonly Func>? asyncValidation; - public ValidationRule(Func validation, + public ValidationRule(Func validation, string message) { syncValidation = validation; @@ -47,4 +47,4 @@ public class ValidationRule } public string Message { get; } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ValidationTrigger.cs b/Toolkit.Foundation/ValidationTrigger.cs index d969d8e..c56a12e 100644 --- a/Toolkit.Foundation/ValidationTrigger.cs +++ b/Toolkit.Foundation/ValidationTrigger.cs @@ -4,4 +4,4 @@ public enum ValidationTrigger { Deferred, Immediate -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/Validator.cs b/Toolkit.Foundation/Validator.cs index c53d751..bfc2b97 100644 --- a/Toolkit.Foundation/Validator.cs +++ b/Toolkit.Foundation/Validator.cs @@ -19,4 +19,4 @@ public class Validator(string propertyName, return (true, null); } -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ValidatorCollection.cs b/Toolkit.Foundation/ValidatorCollection.cs index b58081a..434f577 100644 --- a/Toolkit.Foundation/ValidatorCollection.cs +++ b/Toolkit.Foundation/ValidatorCollection.cs @@ -1,5 +1,5 @@ -using System.Diagnostics.CodeAnalysis; -using System.Collections; +using System.Collections; +using System.Diagnostics.CodeAnalysis; namespace Toolkit.Foundation; @@ -10,15 +10,15 @@ public class ValidatorCollection : public int Count => binders.Count; - public void Add(string key, Validator binder) => + public void Add(string key, Validator binder) => binders.Add(key, binder); - public IEnumerator GetEnumerator() => + public IEnumerator GetEnumerator() => binders.Select(x => x.Value).GetEnumerator(); - public bool TryGet(string key, [MaybeNull] out Validator? value) => + public bool TryGet(string key, [MaybeNull] out Validator? value) => binders.TryGetValue(key, out value); - IEnumerator IEnumerable.GetEnumerator() => + IEnumerator IEnumerable.GetEnumerator() => binders.Select(x => x.Value).GetEnumerator(); -} +} \ No newline at end of file diff --git a/Toolkit.Foundation/ValueViewModel.cs b/Toolkit.Foundation/ValueViewModel.cs index 3f39cfa..25a3102 100644 --- a/Toolkit.Foundation/ValueViewModel.cs +++ b/Toolkit.Foundation/ValueViewModel.cs @@ -17,5 +17,5 @@ public partial class ValueViewModel(IServiceProvider provider, { } - partial void OnValueChanged(TValue? value) => OnChanged(value); + private partial void OnValueChanged(TValue? value) => OnChanged(value); } \ No newline at end of file diff --git a/Toolkit.Foundation/WriteClipboardHandler.cs b/Toolkit.Foundation/WriteClipboardHandler.cs index 6c47034..ac58dfc 100644 --- a/Toolkit.Foundation/WriteClipboardHandler.cs +++ b/Toolkit.Foundation/WriteClipboardHandler.cs @@ -10,4 +10,4 @@ public class WriteClipboardHandler(IClipboardWriter clipboardWriter) : await clipboardWriter.Write(clipboard.Value); } } -} +} \ No newline at end of file diff --git a/Toolkit.UI.Avalonia/AttachedBehaviour.cs b/Toolkit.UI.Avalonia/AttachedBehaviour.cs index 05aac5e..687986b 100644 --- a/Toolkit.UI.Avalonia/AttachedBehaviour.cs +++ b/Toolkit.UI.Avalonia/AttachedBehaviour.cs @@ -2,7 +2,7 @@ namespace Toolkit.UI.Avalonia; -public class AttachedBehaviour : +public class AttachedBehaviour : Trigger { protected override void OnAttachedToVisualTree() diff --git a/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs b/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs index 2924780..e875801 100644 --- a/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs +++ b/Toolkit.UI.Avalonia/BooleanToPasswordCharConverter.cs @@ -8,7 +8,7 @@ public class BooleanToPasswordCharConverter : MarkupExtension, IValueConverter { - public override object ProvideValue(IServiceProvider serviceProvider) => + public override object ProvideValue(IServiceProvider serviceProvider) => this; public char PasswordChar { get; set; } @@ -16,6 +16,6 @@ public class BooleanToPasswordCharConverter : public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => value is bool boolValue ? boolValue ? '\0' : PasswordChar : (object)PasswordChar; - public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => throw new NotImplementedException(); -} +} \ No newline at end of file diff --git a/Toolkit.UI.Avalonia/ConditionCollection.cs b/Toolkit.UI.Avalonia/ConditionCollection.cs index 36f0c69..d8bee8c 100644 --- a/Toolkit.UI.Avalonia/ConditionCollection.cs +++ b/Toolkit.UI.Avalonia/ConditionCollection.cs @@ -5,4 +5,4 @@ namespace Toolkit.UI.Avalonia; public class ConditionCollection : ObservableCollection { -} +} \ No newline at end of file diff --git a/Toolkit.UI.Avalonia/ConditionalExpression.cs b/Toolkit.UI.Avalonia/ConditionalExpression.cs index 5a5f38f..14c35ab 100644 --- a/Toolkit.UI.Avalonia/ConditionalExpression.cs +++ b/Toolkit.UI.Avalonia/ConditionalExpression.cs @@ -2,6 +2,7 @@ using Avalonia.Metadata; namespace Toolkit.UI.Avalonia; + public class ConditionalExpression : AvaloniaObject, ICondition diff --git a/Toolkit.UI.Avalonia/InvokeNavigationViewItemAction.cs b/Toolkit.UI.Avalonia/InvokeNavigationViewItemAction.cs index 97464e9..ef6d560 100644 --- a/Toolkit.UI.Avalonia/InvokeNavigationViewItemAction.cs +++ b/Toolkit.UI.Avalonia/InvokeNavigationViewItemAction.cs @@ -10,6 +10,8 @@ public class InvokeNavigationViewItemAction : AvaloniaObject, IAction { + private int currentIndex; + public static readonly StyledProperty SelectedIndexProperty = AvaloniaProperty.Register(nameof(SelectedIndex), 0); @@ -30,6 +32,11 @@ public class InvokeNavigationViewItemAction : public object? Execute(object? sender, object? parameter) { + //if (SelectedIndex == currentIndex) + //{ + // return false; + //} + if ((Target ?? sender) is NavigationViewItem navigationViewItem) { Dispatcher.UIThread.Post(() => @@ -53,6 +60,7 @@ public class InvokeNavigationViewItemAction : if (collection is { Count: > 0 }) { navigationView.SetValue(NavigationView.SelectedItemProperty, collection[SelectedIndex]); + currentIndex = SelectedIndex; } else { @@ -64,5 +72,4 @@ public class InvokeNavigationViewItemAction : return true; } - } \ No newline at end of file diff --git a/Toolkit.UI.Avalonia/NamedTypeConverter.cs b/Toolkit.UI.Avalonia/NamedTypeConverter.cs index 4b6213a..aa95356 100644 --- a/Toolkit.UI.Avalonia/NamedTypeConverter.cs +++ b/Toolkit.UI.Avalonia/NamedTypeConverter.cs @@ -4,8 +4,8 @@ using System.Globalization; namespace Toolkit.UI.Avalonia; -public class NamedTypeConverter : - MarkupExtension, +public class NamedTypeConverter : + MarkupExtension, IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) @@ -20,4 +20,4 @@ public class NamedTypeConverter : } public override object ProvideValue(IServiceProvider serviceProvider) => this; -} +} \ No newline at end of file diff --git a/Toolkit.UI.Avalonia/NavigateBackAction.cs b/Toolkit.UI.Avalonia/NavigateBackAction.cs index f31b73d..62e6dbd 100644 --- a/Toolkit.UI.Avalonia/NavigateBackAction.cs +++ b/Toolkit.UI.Avalonia/NavigateBackAction.cs @@ -2,7 +2,6 @@ using Avalonia.Controls.Primitives; using Avalonia.Xaml.Interactivity; using Toolkit.Foundation; -using Toolkit.UI.Controls.Avalonia; namespace Toolkit.UI.Avalonia; diff --git a/Toolkit.UI.Avalonia/NavigationViewExtension.cs b/Toolkit.UI.Avalonia/NavigationViewExtension.cs index 7ceaba2..ccb7cba 100644 --- a/Toolkit.UI.Avalonia/NavigationViewExtension.cs +++ b/Toolkit.UI.Avalonia/NavigationViewExtension.cs @@ -65,4 +65,4 @@ public class NavigationViewExtension public static void RemoveItemInvokedHandler(NavigationViewItem element, EventHandler handler) => element.RemoveHandler(ItemInvokedEvent, handler); -} +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs index b064062..bb24525 100644 --- a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs +++ b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs @@ -5,7 +5,8 @@ using Avalonia.Media; using Path = Avalonia.Controls.Shapes.Path; namespace Toolkit.UI.Controls.Avalonia; -public class ContentBadge : + +public class ContentBadge : ContentControl { public static readonly StyledProperty BadgePathProperty = @@ -95,14 +96,17 @@ public class ContentBadge : offsetX = 0; offsetY = 0; break; + case ContentBadgePlacement.TopRight: offsetX = backgroundWidth - scaledWidth; offsetY = 0; break; + case ContentBadgePlacement.BottomLeft: offsetX = 0; offsetY = backgroundHeight - scaledHeight; break; + case ContentBadgePlacement.BottomRight: offsetX = backgroundWidth - scaledWidth; offsetY = backgroundHeight - scaledHeight; @@ -154,5 +158,4 @@ public class ContentBadge : base.OnSizeChanged(args); UpdateBadge(); } -} - +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs index b0b8534..439390f 100644 --- a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs +++ b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs @@ -6,5 +6,4 @@ public enum ContentBadgePlacement TopRight, BottomLeft, BottomRight -} - +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItem.cs b/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItem.cs index cd86847..f65fade 100644 --- a/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItem.cs +++ b/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItem.cs @@ -5,4 +5,4 @@ public class NavigationViewItem : { protected override Type StyleKeyOverride => typeof(FluentAvalonia.UI.Controls.NavigationViewItem); -} +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItemSeparator.cs b/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItemSeparator.cs index 27a5f54..5894d2c 100644 --- a/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItemSeparator.cs +++ b/Toolkit.UI.Controls.Avalonia/NavigationView/NavigationViewItemSeparator.cs @@ -5,4 +5,4 @@ public class NavigationViewItemSeparator : { protected override Type StyleKeyOverride => typeof(FluentAvalonia.UI.Controls.NavigationViewItemSeparator); -} +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/Overflow/Overflow.axaml b/Toolkit.UI.Controls.Avalonia/Overflow/Overflow.axaml index af6c31a..38204e7 100644 --- a/Toolkit.UI.Controls.Avalonia/Overflow/Overflow.axaml +++ b/Toolkit.UI.Controls.Avalonia/Overflow/Overflow.axaml @@ -75,15 +75,14 @@ BadgePath="{TemplateBinding BadgePath}" BadgePlacement="{TemplateBinding BadgePlacement}" BadgeSize="{TemplateBinding BadgeSize}" - Foreground="Red" + Foreground="{TemplateBinding BadgeBrush}" IsBadgeVisible="{TemplateBinding IsBadgeVisible}"> + Content="{TemplateBinding Content}" /> > ItemsPanelProperty = @@ -29,7 +29,6 @@ public class Overflow : private static readonly StyledProperty TemplateSettingsProperty = AvaloniaProperty.Register(nameof(TemplateSettings)); - private readonly ObservableCollection primaryCollection = []; private readonly ObservableCollection secondaryCollection = []; @@ -60,6 +59,7 @@ public class Overflow : get => GetValue(ItemsSourceProperty); set => SetValue(ItemsSourceProperty, value); } + [InheritDataTypeFromItems(nameof(ItemsSource))] public IDataTemplate? ItemTemplate { @@ -146,6 +146,7 @@ public class Overflow : object? selection = args.GetNewValue(); SetValue(SelectedItemProperty, selection); } + private void OnSourceCollectionChanged(object? sender, NotifyCollectionChangedEventArgs args) { @@ -306,5 +307,4 @@ public class Overflow : TemplateSettings.SetValue(OverflowTemplateSettings.SecondarySelectionProperty, null); } } -} - +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/Overflow/OverflowItem.cs b/Toolkit.UI.Controls.Avalonia/Overflow/OverflowItem.cs index fd237ef..567d3de 100644 --- a/Toolkit.UI.Controls.Avalonia/Overflow/OverflowItem.cs +++ b/Toolkit.UI.Controls.Avalonia/Overflow/OverflowItem.cs @@ -1,16 +1,14 @@ using Avalonia; using Avalonia.Controls; +using Avalonia.Media; namespace Toolkit.UI.Controls.Avalonia; -public class OverflowItem : +public class OverflowItem : ListBoxItem { - public static readonly StyledProperty BadgeSizeProperty = - AvaloniaProperty.Register(nameof(BadgeSize), 14); - - public static readonly StyledProperty IsBadgeVisibleProperty = - AvaloniaProperty.Register(nameof(IsBadgeVisible), true); + public static readonly StyledProperty BadgeBrushProperty = + AvaloniaProperty.Register(nameof(BadgeBrush)); public static readonly StyledProperty BadgePathProperty = AvaloniaProperty.Register(nameof(BadgePath)); @@ -18,6 +16,18 @@ public class OverflowItem : public static readonly StyledProperty BadgePlacementProperty = AvaloniaProperty.Register(nameof(BadgePlacement), ContentBadgePlacement.BottomRight); + public static readonly StyledProperty BadgeSizeProperty = + AvaloniaProperty.Register(nameof(BadgeSize), 14); + + public static readonly StyledProperty IsBadgeVisibleProperty = + AvaloniaProperty.Register(nameof(IsBadgeVisible), true); + + public IBrush BadgeBrush + { + get => GetValue(BadgeBrushProperty); + set => SetValue(BadgeBrushProperty, value); + } + public string BadgePath { get => GetValue(BadgePathProperty); @@ -41,5 +51,4 @@ public class OverflowItem : get => GetValue(IsBadgeVisibleProperty); set => SetValue(IsBadgeVisibleProperty, value); } -} - +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/Overflow/OverflowTemplateSettings.cs b/Toolkit.UI.Controls.Avalonia/Overflow/OverflowTemplateSettings.cs index 26a0640..aade7bb 100644 --- a/Toolkit.UI.Controls.Avalonia/Overflow/OverflowTemplateSettings.cs +++ b/Toolkit.UI.Controls.Avalonia/Overflow/OverflowTemplateSettings.cs @@ -45,5 +45,4 @@ public class OverflowTemplateSettings : get => GetValue(SecondarySelectionProperty); set => SetValue(SecondarySelectionProperty, value); } -} - +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/Overflow/TemplateListBox.cs b/Toolkit.UI.Controls.Avalonia/Overflow/TemplateListBox.cs index bc81382..ae50a67 100644 --- a/Toolkit.UI.Controls.Avalonia/Overflow/TemplateListBox.cs +++ b/Toolkit.UI.Controls.Avalonia/Overflow/TemplateListBox.cs @@ -39,5 +39,4 @@ public class TemplateListBox : recycleKey = DefaultRecycleKey; return true; } -} - +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPicture.cs b/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPicture.cs index ca1081b..795139a 100644 --- a/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPicture.cs +++ b/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPicture.cs @@ -7,7 +7,6 @@ using Avalonia.Media.Imaging; namespace Toolkit.UI.Controls.Avalonia; - public class PersonPicture : TemplatedControl { public static readonly StyledProperty BadgeGlyphProperty = diff --git a/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPictureColourGenerator.cs b/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPictureColourGenerator.cs index ea986ed..84edfb6 100644 --- a/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPictureColourGenerator.cs +++ b/Toolkit.UI.Controls.Avalonia/PersonPicture/PersonPictureColourGenerator.cs @@ -8,15 +8,56 @@ public class PersonPictureColourGenerator { private readonly string[] colours = [ - "#FFB900", "#FF8C00", "#F7630C", "#CA5010", "#DA3B01", "#EF6950", "#D13438", "#FF4343", - "#E74856", "#E81123", "#EA005E", "#C30052", "#E3008C", "#BF0077", "#C239B3", "#9A0089", - "#0078D7", "#0063B1", "#8E8CD8", "#6B69D6", "#8764B8", "#744DA9", "#B146C2", "#881798", - "#0099BC", "#2D7D9A", "#00B7C3", "#038387", "#00B294", "#018574", "#00CC6A", "#10893E", - "#7A7574", "#5D5A58", "#68768A", "#515C6B", "#567C73", "#486860", "#498205", "#107C10", - "#767676", "#4C4A48", "#69797E", "#4A5459", "#647C64", "#525E54", "#847545", "#7E735F" + "#FFB900", + "#FF8C00", + "#F7630C", + "#CA5010", + "#DA3B01", + "#EF6950", + "#D13438", + "#FF4343", + "#E74856", + "#E81123", + "#EA005E", + "#C30052", + "#E3008C", + "#BF0077", + "#C239B3", + "#9A0089", + "#0078D7", + "#0063B1", + "#8E8CD8", + "#6B69D6", + "#8764B8", + "#744DA9", + "#B146C2", + "#881798", + "#0099BC", + "#2D7D9A", + "#00B7C3", + "#038387", + "#00B294", + "#018574", + "#00CC6A", + "#10893E", + "#7A7574", + "#5D5A58", + "#68768A", + "#515C6B", + "#567C73", + "#486860", + "#498205", + "#107C10", + "#767676", + "#4C4A48", + "#69797E", + "#4A5459", + "#647C64", + "#525E54", + "#847545", + "#7E735F" ]; - public Color GenerateColour(string input) { byte[] hashBytes = GetHash(input); @@ -42,4 +83,4 @@ public class PersonPictureColourGenerator return Color.FromArgb(a, r, g, b); } -} +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpander.cs b/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpander.cs index 1d8ccd3..9986599 100644 --- a/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpander.cs +++ b/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpander.cs @@ -33,7 +33,6 @@ public class SettingsExpander : set => SetValue(IsToggleableProperty, value); } - protected override Type StyleKeyOverride => typeof(SettingsExpander); -} +} \ No newline at end of file diff --git a/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpanderToggleButton.cs b/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpanderToggleButton.cs index f3d9b06..d52b192 100644 --- a/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpanderToggleButton.cs +++ b/Toolkit.UI.Controls.Avalonia/SettingsExpander/SettingsExpanderToggleButton.cs @@ -4,7 +4,7 @@ using Avalonia.Input; namespace Toolkit.UI.Controls.Avalonia; -public class SettingsExpanderToggleButton : +public class SettingsExpanderToggleButton : ToggleButton { public static readonly StyledProperty IsToggleableProperty =