diff --git a/src/Artemis.UI.Shared/GradientPicker.xaml.cs b/src/Artemis.UI.Shared/GradientPicker.xaml.cs
index d767da341..c735e1f90 100644
--- a/src/Artemis.UI.Shared/GradientPicker.xaml.cs
+++ b/src/Artemis.UI.Shared/GradientPicker.xaml.cs
@@ -1,4 +1,5 @@
-using System.ComponentModel;
+using System;
+using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
@@ -6,6 +7,7 @@ using System.Windows.Input;
using Artemis.Core.Models.Profile;
using Artemis.UI.Shared.Annotations;
using Artemis.UI.Shared.Screens.GradientEditor;
+using Artemis.UI.Shared.Services.Interfaces;
namespace Artemis.UI.Shared
{
@@ -14,6 +16,20 @@ namespace Artemis.UI.Shared
///
public partial class GradientPicker : UserControl, INotifyPropertyChanged
{
+ ///
+ /// Used by the gradient picker to load saved gradients, do not touch or it'll just throw an exception
+ ///
+ public static IGradientPickerService GradientPickerService
+ {
+ private get => _gradientPickerService;
+ set
+ {
+ if (_gradientPickerService != null)
+ throw new AccessViolationException("This is not for you to touch");
+ _gradientPickerService = value;
+ }
+ }
+
public static readonly DependencyProperty ColorGradientProperty = DependencyProperty.Register(nameof(ColorGradient), typeof(ColorGradient), typeof(GradientPicker),
new FrameworkPropertyMetadata(default(ColorGradient), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, ColorGradientPropertyChangedCallback));
@@ -24,6 +40,8 @@ namespace Artemis.UI.Shared
typeof(RoutedPropertyChangedEventHandler),
typeof(GradientPicker));
+ private static IGradientPickerService _gradientPickerService;
+
private bool _inCallback;
public GradientPicker()
diff --git a/src/Artemis.UI.Shared/Services/GradientPickerService.cs b/src/Artemis.UI.Shared/Services/GradientPickerService.cs
new file mode 100644
index 000000000..db7b877ba
--- /dev/null
+++ b/src/Artemis.UI.Shared/Services/GradientPickerService.cs
@@ -0,0 +1,8 @@
+using Artemis.UI.Shared.Services.Interfaces;
+
+namespace Artemis.UI.Shared.Services
+{
+ public class GradientPickerService : IGradientPickerService
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.UI.Shared/Services/Interfaces/IGradientPickerService.cs b/src/Artemis.UI.Shared/Services/Interfaces/IGradientPickerService.cs
new file mode 100644
index 000000000..f1d0cc43d
--- /dev/null
+++ b/src/Artemis.UI.Shared/Services/Interfaces/IGradientPickerService.cs
@@ -0,0 +1,7 @@
+namespace Artemis.UI.Shared.Services.Interfaces
+{
+ public interface IGradientPickerService : IArtemisSharedUIService
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/TrayViewModel.cs b/src/Artemis.UI/Screens/TrayViewModel.cs
index 818458204..efb7d570f 100644
--- a/src/Artemis.UI/Screens/TrayViewModel.cs
+++ b/src/Artemis.UI/Screens/TrayViewModel.cs
@@ -1,9 +1,10 @@
-using System.Windows;
-using Artemis.Core.Services;
+using Artemis.Core.Services;
using Artemis.Core.Services.Interfaces;
using Artemis.Core.Utilities;
using Artemis.UI.Events;
using Artemis.UI.Screens.Splash;
+using Artemis.UI.Shared;
+using Artemis.UI.Shared.Services.Interfaces;
using Ninject;
using Stylet;
@@ -11,9 +12,10 @@ namespace Artemis.UI.Screens
{
public class TrayViewModel : Screen
{
+ private readonly IEventAggregator _eventAggregator;
private readonly IKernel _kernel;
private readonly IWindowManager _windowManager;
- private readonly IEventAggregator _eventAggregator;
+ private bool _setGradientPickerService;
private SplashViewModel _splashViewModel;
public TrayViewModel(IKernel kernel, IWindowManager windowManager, IEventAggregator eventAggregator, ICoreService coreService, ISettingsService settingsService)
@@ -39,6 +41,14 @@ namespace Artemis.UI.Screens
if (!CanShowRootViewModel)
return;
+ // The gradient picker must have a reference to this service to be able to load saved gradients.
+ // To avoid wasting resources, only set the service once and not until showing the UI.
+ if (!_setGradientPickerService)
+ {
+ GradientPicker.GradientPickerService = _kernel.Get();
+ _setGradientPickerService = true;
+ }
+
CanShowRootViewModel = false;
Execute.OnUIThread(() =>
{