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 1/3] 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 @@
+
+
+
+xaml中的使用:
+
+
+
+
+
+
+
+
+{% endcode %}
+
+效果如下:
+
+
+
+{% endnode %}
diff --git a/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png b/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1d39abe8f5d84797393de30bcbd9a7de33ff718
GIT binary patch
literal 4238
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
literal 0
HcmV?d00001
From 95a8241bb00b2cb35d9b6730887cf3711bb2e3c8 Mon Sep 17 00:00:00 2001
From: guanguanchuangyu <3246907890@qq.com>
Date: Sun, 4 Aug 2019 16:10:55 +0800
Subject: [PATCH 3/3] ggcy-add warning info of DataGrid
---
.../native_controls/dataGrid/index.md | 45 +++++++++++++++++-
.../images/DataGrid-Warning01.png | Bin 0 -> 4238 bytes
2 files changed, 44 insertions(+), 1 deletion(-)
create mode 100644 doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png
diff --git a/doc/source/handycontrol/native_controls/dataGrid/index.md b/doc/source/handycontrol/native_controls/dataGrid/index.md
index 7ea36f18..6733d645 100644
--- a/doc/source/handycontrol/native_controls/dataGrid/index.md
+++ b/doc/source/handycontrol/native_controls/dataGrid/index.md
@@ -2,6 +2,19 @@
title: DataGrid 数据表格
---
+**HandyControl中自带DataGrid相关样式**
+
+| style名称 | 所属类型 | 用途描述 |
+| :------------------------ | :------------------------------------------ | :----------------------------------------------------- |
+| RowHeaderGripperStyle | Thumb | RowHeader的可拖拽样式 |
+| ColumnHeaderGripperStyle | Thumb | ColumnHeader可拖拽样式 |
+| DataGridCellStyle | DataGridCell | DataGrid数据列样式 |
+| DataGridRowStyle | DataGridRow | DataGrid数据行样式 |
+| DataGridColumnHeaderStyle | DataGridColumnHeader | DataGrid列头样式 |
+| DataGridRowHeaderStyle | DataGridRowHeader | DataGrid行头样式 |
+| TextBlockComboBoxStyle | controls:DataGridAttach.ComboBoxColumnStyle | DataGrid附加属性文本框下拉列的非编辑模式下文本显示样式 |
+| DataGridTextColumnStyle | TextBlock | DataGrid文本列样式 |
+
{% note info no-icon %}
用例:
@@ -29,4 +42,34 @@ title: DataGrid 数据表格
{% endcode %}

-{% endnote %}
\ No newline at end of file
+{% endnote %}
+
+**常见问题:**
+{% note warning no-icon%}
+对于文本显示列`DataGridTextColumn`需要设定文本内容`水平居中`或者`水平居右`,而不是HandyControl中设定的样式默认显示为`居左`时,需要继承`DataGridCellStyle`重写`HorizontalContentAlignment` 属性为`Center` 或`Right` 需要注意的是,此方式仅仅使用与引入了HandControl资源样式的项目,普通原生DataGrid使用该方式无效。
+
+用例如下:
+
+{% code %}
+
+样式:
+
+
+xaml中的使用:
+
+
+
+
+
+
+
+
+{% endcode %}
+
+效果如下:
+
+
+
+{% endnote %}
diff --git a/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png b/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1d39abe8f5d84797393de30bcbd9a7de33ff718
GIT binary patch
literal 4238
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
literal 0
HcmV?d00001