From fff43a84ac760bcc0685051b699f1bf85231b60d Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Fri, 2 Aug 2019 00:15:06 +0800
Subject: [PATCH] upgraded growl
---
.../HandyControl_Net_40.csproj | 4 -
.../Themes/Styles/Growl.xaml | 62 -----
.../HandyControl_Net_GE45.csproj | 4 -
.../Themes/Styles/Growl.xaml | 62 -----
.../HandyControlDemo_Shared/App.xaml.cs | 1 +
.../HandyControlDemo_Shared.projitems | 7 -
.../UserControl/Controls/GrowlDemoCtl.xaml | 33 ++-
.../Controls/RelativePanelDemoCtl.xaml | 6 -
.../Controls/RelativePanelDemoCtl.xaml.cs | 10 -
.../ViewModel/Controls/GrowlDemoViewModel.cs | 52 +++-
.../Window/GrowlDemoWindow.xaml | 2 +-
.../Controls/{Other => Growl}/Growl.cs | 239 +++++++++++++++++-
.../Controls/Growl/GrowlWindow.cs | 47 ++++
.../HandyControl_Shared.projitems | 10 +-
.../Themes/Styles/Growl.xaml | 18 ++
15 files changed, 385 insertions(+), 172 deletions(-)
delete mode 100644 src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml
delete mode 100644 src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Growl.xaml
delete mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml
delete mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs
rename src/Shared/HandyControl_Shared/Controls/{Other => Growl}/Growl.cs (71%)
create mode 100644 src/Shared/HandyControl_Shared/Controls/Growl/GrowlWindow.cs
rename src/{Core_30/HandyControl_Core_30 => Shared/HandyControl_Shared}/Themes/Styles/Growl.xaml (85%)
diff --git a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
index 0ea83fbe..059b6816 100644
--- a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
+++ b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
@@ -69,10 +69,6 @@
Designer
XamlIntelliSenseFileGenerator
-
- Designer
- XamlIntelliSenseFileGenerator
-
Designer
XamlIntelliSenseFileGenerator
diff --git a/src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml b/src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml
deleted file mode 100644
index d28b4fa2..00000000
--- a/src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj b/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj
index d608122e..fbae7bb8 100644
--- a/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj
+++ b/src/Net_GE45/HandyControl_Net_GE45/HandyControl_Net_GE45.csproj
@@ -138,10 +138,6 @@
Designer
XamlIntelliSenseFileGenerator
-
- Designer
- XamlIntelliSenseFileGenerator
-
Designer
XamlIntelliSenseFileGenerator
diff --git a/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Growl.xaml b/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Growl.xaml
deleted file mode 100644
index d28b4fa2..00000000
--- a/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Growl.xaml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/App.xaml.cs b/src/Shared/HandyControlDemo_Shared/App.xaml.cs
index 08ba9c5b..c41eb5c8 100644
--- a/src/Shared/HandyControlDemo_Shared/App.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/App.xaml.cs
@@ -18,6 +18,7 @@ namespace HandyControlDemo
{
base.OnStartup(e);
+ ShutdownMode = ShutdownMode.OnMainWindowClose;
GlobalData.Init();
ConfigHelper.Instance.SetLang(GlobalData.Config.Lang);
diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
index 8c3ece37..6492d068 100644
--- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
+++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
@@ -63,9 +63,6 @@
RangeSliderDemoCtl.xaml
-
- RelativePanelDemoCtl.xaml
-
BadgeDemoCtl.xaml
@@ -434,10 +431,6 @@
Designer
MSBuild:Compile
-
- Designer
- MSBuild:Compile
-
Designer
MSBuild:Compile
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml
index 5d229ef7..3d06771c 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml
@@ -7,16 +7,29 @@
Background="{DynamicResource RegionBrush}">
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml
deleted file mode 100644
index 50fa38b9..00000000
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs
deleted file mode 100644
index 39b53914..00000000
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace HandyControlDemo.UserControl
-{
- public partial class RelativePanelDemoCtl
- {
- public RelativePanelDemoCtl()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/GrowlDemoViewModel.cs b/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/GrowlDemoViewModel.cs
index c40bab23..2685093b 100644
--- a/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/GrowlDemoViewModel.cs
+++ b/src/Shared/HandyControlDemo_Shared/ViewModel/Controls/GrowlDemoViewModel.cs
@@ -25,6 +25,8 @@ namespace HandyControlDemo.ViewModel
_token = token;
}
+ #region Window
+
public RelayCommand InfoCmd => new Lazy(() =>
new RelayCommand(() => Growl.Info(Properties.Langs.Lang.GrowlInfo, _token))).Value;
@@ -47,14 +49,14 @@ namespace HandyControlDemo.ViewModel
public RelayCommand ErrorCmd => new Lazy(() =>
new RelayCommand(() => Growl.Error(Properties.Langs.Lang.GrowlError, _token))).Value;
- public RelayCommand AskCmd => new Lazy(() =>
+ public RelayCommand AskCmd => new Lazy(() =>
new RelayCommand(() => Growl.Ask(Properties.Langs.Lang.GrowlAsk, isConfirmed =>
{
Growl.Info(isConfirmed.ToString());
return true;
}, _token))).Value;
- public RelayCommand FatalCmd => new Lazy(() =>
+ public RelayCommand FatalCmd => new Lazy(() =>
new RelayCommand(() => Growl.Fatal(new GrowlInfo
{
Message = Properties.Langs.Lang.GrowlFatal,
@@ -63,7 +65,51 @@ namespace HandyControlDemo.ViewModel
}))).Value;
public RelayCommand ClearCmd => new Lazy(() =>
- new RelayCommand(() => Growl.Clear())).Value;
+ new RelayCommand(() => Growl.Clear(_token))).Value;
+
+ #endregion
+
+ #region Desktop
+
+ public RelayCommand InfoGlobalCmd => new Lazy(() =>
+ new RelayCommand(() => Growl.InfoGlobal(Properties.Langs.Lang.GrowlInfo))).Value;
+
+ public RelayCommand SuccessGlobalCmd => new Lazy(() =>
+ new RelayCommand(() => Growl.SuccessGlobal(Properties.Langs.Lang.GrowlSuccess))).Value;
+
+ public RelayCommand WarningGlobalCmd => new Lazy(() =>
+ new RelayCommand(() => Growl.WarningGlobal(new GrowlInfo
+ {
+ Message = Properties.Langs.Lang.GrowlWarning,
+ CancelStr = Properties.Langs.Lang.Ignore,
+ ActionBeforeClose = isConfirmed =>
+ {
+ Growl.InfoGlobal(isConfirmed.ToString());
+ return true;
+ }
+ }))).Value;
+
+ public RelayCommand ErrorGlobalCmd => new Lazy(() =>
+ new RelayCommand(() => Growl.ErrorGlobal(Properties.Langs.Lang.GrowlError))).Value;
+
+ public RelayCommand AskGlobalCmd => new Lazy(() =>
+ new RelayCommand(() => Growl.AskGlobal(Properties.Langs.Lang.GrowlAsk, isConfirmed =>
+ {
+ Growl.InfoGlobal(isConfirmed.ToString());
+ return true;
+ }))).Value;
+
+ public RelayCommand FatalGlobalCmd => new Lazy(() =>
+ new RelayCommand(() => Growl.FatalGlobal(new GrowlInfo
+ {
+ Message = Properties.Langs.Lang.GrowlFatal,
+ ShowDateTime = false
+ }))).Value;
+
+ public RelayCommand ClearGlobalCmd => new Lazy(() =>
+ new RelayCommand(Growl.ClearGlobal)).Value;
+
+ #endregion
public RelayCommand NewWindowCmd => new Lazy(() =>
new RelayCommand(() => new GrowlDemoWindow
diff --git a/src/Shared/HandyControlDemo_Shared/Window/GrowlDemoWindow.xaml b/src/Shared/HandyControlDemo_Shared/Window/GrowlDemoWindow.xaml
index 9a329f26..99f46bf7 100644
--- a/src/Shared/HandyControlDemo_Shared/Window/GrowlDemoWindow.xaml
+++ b/src/Shared/HandyControlDemo_Shared/Window/GrowlDemoWindow.xaml
@@ -15,7 +15,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Growl.cs b/src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs
similarity index 71%
rename from src/Shared/HandyControl_Shared/Controls/Other/Growl.cs
rename to src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs
index 789fb7c3..8e285916 100644
--- a/src/Shared/HandyControl_Shared/Controls/Other/Growl.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs
@@ -31,6 +31,8 @@ namespace HandyControl.Controls
#region Data
+ private static GrowlWindow GrowlWindow;
+
private Panel _panelMore;
private Grid _gridMain;
@@ -293,6 +295,8 @@ namespace HandyControl.Controls
private static void InitGrowlPanel(Panel panel)
{
+ if (panel == null) return;
+
var menuItem = new MenuItem
{
Header = Properties.Langs.Lang.Clear
@@ -334,6 +338,61 @@ namespace HandyControl.Controls
if (!_staysOpen) StartTimer();
}
+ private static void ShowGlobal(GrowlInfo growlInfo)
+ {
+ if (GrowlWindow == null)
+ {
+ GrowlWindow = new GrowlWindow();
+ GrowlWindow.Show();
+ InitGrowlPanel(GrowlWindow.GrowlPanel);
+ GrowlWindow.Init();
+ }
+
+ GrowlWindow.Show(true);
+
+#if netle40
+ Application.Current.Dispatcher?.Invoke(new Action(() =>
+ {
+ var ctl = new Growl
+ {
+ Message = growlInfo.Message,
+ Time = DateTime.Now,
+ Icon = ResourceHelper.GetResource(growlInfo.IconKey),
+ IconBrush = ResourceHelper.GetResource(growlInfo.IconBrushKey),
+ _showCloseButton = growlInfo.ShowCloseButton,
+ ActionBeforeClose = growlInfo.ActionBeforeClose,
+ _staysOpen = growlInfo.StaysOpen,
+ ShowDateTime = growlInfo.ShowDateTime,
+ ConfirmStr = growlInfo.ConfirmStr,
+ CancelStr = growlInfo.CancelStr,
+ Type = growlInfo.Type,
+ _waitTime = Math.Max(growlInfo.WaitTime, 2)
+ };
+ GrowlWindow.GrowlPanel.Children.Insert(0, ctl);
+ }));
+#else
+ Application.Current.Dispatcher?.Invoke(() =>
+ {
+ var ctl = new Growl
+ {
+ Message = growlInfo.Message,
+ Time = DateTime.Now,
+ Icon = ResourceHelper.GetResource(growlInfo.IconKey),
+ IconBrush = ResourceHelper.GetResource(growlInfo.IconBrushKey),
+ _showCloseButton = growlInfo.ShowCloseButton,
+ ActionBeforeClose = growlInfo.ActionBeforeClose,
+ _staysOpen = growlInfo.StaysOpen,
+ ShowDateTime = growlInfo.ShowDateTime,
+ ConfirmStr = growlInfo.ConfirmStr,
+ CancelStr = growlInfo.CancelStr,
+ Type = growlInfo.Type,
+ _waitTime = Math.Max(growlInfo.WaitTime, 2)
+ };
+ GrowlWindow.GrowlPanel.Children.Insert(0, ctl);
+ });
+#endif
+ }
+
///
/// 显示信息
///
@@ -341,7 +400,7 @@ namespace HandyControl.Controls
private static void Show(GrowlInfo growlInfo)
{
#if netle40
- Application.Current.Dispatcher.Invoke(new Action(() =>
+ Application.Current.Dispatcher?.Invoke(new Action(() =>
{
var ctl = new Growl
{
@@ -371,7 +430,7 @@ namespace HandyControl.Controls
}
}));
#else
- Application.Current.Dispatcher.Invoke(() =>
+ Application.Current.Dispatcher?.Invoke(() =>
{
var ctl = new Growl
{
@@ -430,6 +489,31 @@ namespace HandyControl.Controls
Show(growlInfo);
}
+ ///
+ /// 成功
+ ///
+ ///
+ public static void SuccessGlobal(string message) => SuccessGlobal(new GrowlInfo
+ {
+ Message = message
+ });
+
+ ///
+ /// 成功
+ ///
+ ///
+ public static void SuccessGlobal(GrowlInfo growlInfo)
+ {
+ if (growlInfo == null) throw new ArgumentNullException(nameof(growlInfo));
+ if (!growlInfo.IsCustom)
+ {
+ growlInfo.IconKey = ResourceToken.SuccessGeometry;
+ growlInfo.IconBrushKey = ResourceToken.SuccessBrush;
+ growlInfo.Type = InfoType.Success;
+ }
+ ShowGlobal(growlInfo);
+ }
+
///
/// 消息
///
@@ -457,6 +541,31 @@ namespace HandyControl.Controls
Show(growlInfo);
}
+ ///
+ /// 消息
+ ///
+ ///
+ public static void InfoGlobal(string message) => InfoGlobal(new GrowlInfo
+ {
+ Message = message
+ });
+
+ ///
+ /// 消息
+ ///
+ ///
+ public static void InfoGlobal(GrowlInfo growlInfo)
+ {
+ if (growlInfo == null) throw new ArgumentNullException(nameof(growlInfo));
+ if (!growlInfo.IsCustom)
+ {
+ growlInfo.IconKey = ResourceToken.InfoGeometry;
+ growlInfo.IconBrushKey = ResourceToken.InfoBrush;
+ growlInfo.Type = InfoType.Info;
+ }
+ ShowGlobal(growlInfo);
+ }
+
///
/// 警告
///
@@ -484,6 +593,31 @@ namespace HandyControl.Controls
Show(growlInfo);
}
+ ///
+ /// 警告
+ ///
+ ///
+ public static void WarningGlobal(string message) => WarningGlobal(new GrowlInfo
+ {
+ Message = message
+ });
+
+ ///
+ /// 警告
+ ///
+ ///
+ public static void WarningGlobal(GrowlInfo growlInfo)
+ {
+ if (growlInfo == null) throw new ArgumentNullException(nameof(growlInfo));
+ if (!growlInfo.IsCustom)
+ {
+ growlInfo.IconKey = ResourceToken.WarningGeometry;
+ growlInfo.IconBrushKey = ResourceToken.WarningBrush;
+ growlInfo.Type = InfoType.Warning;
+ }
+ ShowGlobal(growlInfo);
+ }
+
///
/// 错误
///
@@ -512,6 +646,32 @@ namespace HandyControl.Controls
Show(growlInfo);
}
+ ///
+ /// 错误
+ ///
+ ///
+ public static void ErrorGlobal(string message) => ErrorGlobal(new GrowlInfo
+ {
+ Message = message
+ });
+
+ ///
+ /// 错误
+ ///
+ ///
+ public static void ErrorGlobal(GrowlInfo growlInfo)
+ {
+ if (growlInfo == null) throw new ArgumentNullException(nameof(growlInfo));
+ if (!growlInfo.IsCustom)
+ {
+ growlInfo.IconKey = ResourceToken.ErrorGeometry;
+ growlInfo.IconBrushKey = ResourceToken.DangerBrush;
+ growlInfo.StaysOpen = true;
+ growlInfo.Type = InfoType.Error;
+ }
+ ShowGlobal(growlInfo);
+ }
+
///
/// 严重
///
@@ -542,6 +702,34 @@ namespace HandyControl.Controls
Show(growlInfo);
}
+ ///
+ /// 严重
+ ///
+ ///
+ public static void FatalGlobal(string message) => FatalGlobal(new GrowlInfo
+ {
+ Message = message
+ });
+
+ ///
+ /// 严重
+ ///
+ ///
+ public static void FatalGlobal(GrowlInfo growlInfo)
+ {
+ if (growlInfo == null) throw new ArgumentNullException(nameof(growlInfo));
+ if (!growlInfo.IsCustom)
+ {
+ growlInfo.IconKey = ResourceToken.FatalGeometry;
+ growlInfo.IconBrushKey = ResourceToken.PrimaryTextBrush;
+ growlInfo.StaysOpen = true;
+ growlInfo.ShowCloseButton = false;
+ growlInfo.Type = InfoType.Fatal;
+ if (GrowlPanel.ContextMenu != null) GrowlPanel.ContextMenu.Opacity = 0;
+ }
+ ShowGlobal(growlInfo);
+ }
+
///
/// 询问
///
@@ -573,6 +761,35 @@ namespace HandyControl.Controls
Show(growlInfo);
}
+ ///
+ /// 询问
+ ///
+ ///
+ ///
+ public static void AskGlobal(string message, Func actionBeforeClose) => AskGlobal(new GrowlInfo
+ {
+ Message = message,
+ ActionBeforeClose = actionBeforeClose
+ });
+
+ ///
+ /// 询问
+ ///
+ ///
+ public static void AskGlobal(GrowlInfo growlInfo)
+ {
+ if (growlInfo == null) throw new ArgumentNullException(nameof(growlInfo));
+ if (!growlInfo.IsCustom)
+ {
+ growlInfo.IconKey = ResourceToken.AskGeometry;
+ growlInfo.IconBrushKey = ResourceToken.AccentBrush;
+ growlInfo.StaysOpen = true;
+ growlInfo.ShowCloseButton = false;
+ growlInfo.Type = InfoType.Ask;
+ }
+ ShowGlobal(growlInfo);
+ }
+
private void ButtonClose_OnClick(object sender, RoutedEventArgs e) => Close();
///
@@ -589,6 +806,12 @@ namespace HandyControl.Controls
if (Parent is Panel panel)
{
panel.Children.Remove(this);
+
+ if (GrowlWindow?.GrowlPanel != null && GrowlWindow.GrowlPanel.Children.Count == 0)
+ {
+ GrowlWindow.Close();
+ GrowlWindow = null;
+ }
}
};
transform.BeginAnimation(TranslateTransform.XProperty, animation);
@@ -619,6 +842,7 @@ namespace HandyControl.Controls
///
private static void Clear(Panel panel)
{
+ if (panel == null) return;
panel.Children.Clear();
if (panel.ContextMenu != null)
{
@@ -627,6 +851,17 @@ namespace HandyControl.Controls
}
}
+ ///
+ /// 清除
+ ///
+ public static void ClearGlobal()
+ {
+ if (GrowlWindow == null) return;
+ Clear(GrowlWindow.GrowlPanel);
+ GrowlWindow.Close();
+ GrowlWindow = null;
+ }
+
private void ButtonCancel_OnClick(object sender, RoutedEventArgs e)
{
if (ActionBeforeClose?.Invoke(false) == true)
diff --git a/src/Shared/HandyControl_Shared/Controls/Growl/GrowlWindow.cs b/src/Shared/HandyControl_Shared/Controls/Growl/GrowlWindow.cs
new file mode 100644
index 00000000..a341abbc
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/Growl/GrowlWindow.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Interop;
+using HandyControl.Tools.Interop;
+
+namespace HandyControl.Controls
+{
+ [TemplatePart(Name = ElementGrowPanel, Type = typeof(Panel))]
+ internal class GrowlWindow : Window
+ {
+ private const string ElementGrowPanel = "PART_GrowPanel";
+
+ public Panel GrowlPanel { get; set; }
+
+ public GrowlWindow()
+ {
+ WindowStyle = WindowStyle.None;
+ AllowsTransparency = true;
+ }
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ GrowlPanel = GetTemplateChild(ElementGrowPanel) as Panel;
+ }
+
+ protected override void OnSourceInitialized(EventArgs e)
+ {
+ base.OnSourceInitialized(e);
+
+ var _ = new WindowInteropHelper(this)
+ {
+ Owner = NativeMethods.GetDesktopWindow()
+ };
+ }
+
+ public void Init()
+ {
+ var desktopWorkingArea = SystemParameters.WorkArea;
+ Height = desktopWorkingArea.Height;
+ Left = desktopWorkingArea.Right - Width;
+ Top = 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
index bfb0b9f6..eb5081d3 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -19,6 +19,7 @@
+
@@ -82,7 +83,7 @@
-
+
@@ -385,6 +386,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ XamlIntelliSenseFileGenerator
+
Designer
MSBuild:Compile
@@ -810,4 +815,7 @@
MSBuild:Compile
+
+
+
\ No newline at end of file
diff --git a/src/Core_30/HandyControl_Core_30/Themes/Styles/Growl.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Growl.xaml
similarity index 85%
rename from src/Core_30/HandyControl_Core_30/Themes/Styles/Growl.xaml
rename to src/Shared/HandyControl_Shared/Themes/Styles/Growl.xaml
index d28b4fa2..9fd38d69 100644
--- a/src/Core_30/HandyControl_Core_30/Themes/Styles/Growl.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Growl.xaml
@@ -10,6 +10,24 @@
+
+