diff --git a/HandyControl/Controls/Window/MessageBox.cs b/HandyControl/Controls/Window/MessageBox.cs index a31ef8c9..b2e5400b 100644 --- a/HandyControl/Controls/Window/MessageBox.cs +++ b/HandyControl/Controls/Window/MessageBox.cs @@ -28,7 +28,7 @@ namespace HandyControl.Controls private MessageBoxResult _messageBoxResult = MessageBoxResult.Cancel; - private bool _showOK; + private bool _showOk; private bool _showCancel; @@ -50,7 +50,7 @@ namespace HandyControl.Controls { _messageBoxResult = MessageBoxResult.OK; Close(); - }, (s, e) => e.CanExecute = _showOK)); + }, (s, e) => e.CanExecute = _showOk)); CommandBindings.Add(new CommandBinding(ControlCommands.Cancel, (s, e) => { _messageBoxResult = MessageBoxResult.Cancel; @@ -92,12 +92,16 @@ namespace HandyControl.Controls /// public static MessageBoxResult Success(string messageBoxText, string caption = null) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK); - SetButtonStatus(messageBox, MessageBoxButton.OK); - messageBox._showImage = true; - messageBox._image = ResourceHelper.GetResource(ResourceToken.SuccessGeometry); - messageBox._imageBrush = ResourceHelper.GetResource(ResourceToken.SuccessBrush); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK); + SetButtonStatus(messageBox, MessageBoxButton.OK); + messageBox._showImage = true; + messageBox._image = ResourceHelper.GetResource(ResourceToken.SuccessGeometry); + messageBox._imageBrush = ResourceHelper.GetResource(ResourceToken.SuccessBrush); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } @@ -109,10 +113,14 @@ namespace HandyControl.Controls /// public static MessageBoxResult Info(string messageBoxText, string caption = null) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK); - SetButtonStatus(messageBox, MessageBoxButton.OK); - SetImage(messageBox, MessageBoxImage.Information); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK); + SetButtonStatus(messageBox, MessageBoxButton.OK); + SetImage(messageBox, MessageBoxImage.Information); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } @@ -124,10 +132,14 @@ namespace HandyControl.Controls /// public static MessageBoxResult Warning(string messageBoxText, string caption = null) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK); - SetButtonStatus(messageBox, MessageBoxButton.OK); - SetImage(messageBox, MessageBoxImage.Warning); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK); + SetButtonStatus(messageBox, MessageBoxButton.OK); + SetImage(messageBox, MessageBoxImage.Warning); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } @@ -139,10 +151,14 @@ namespace HandyControl.Controls /// public static MessageBoxResult Error(string messageBoxText, string caption = null) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); - SetButtonStatus(messageBox, MessageBoxButton.OK); - SetImage(messageBox, MessageBoxImage.Error); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); + SetButtonStatus(messageBox, MessageBoxButton.OK); + SetImage(messageBox, MessageBoxImage.Error); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } @@ -154,12 +170,16 @@ namespace HandyControl.Controls /// public static MessageBoxResult Fatal(string messageBoxText, string caption = null) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK); - SetButtonStatus(messageBox, MessageBoxButton.OK); - messageBox._showImage = true; - messageBox._image = ResourceHelper.GetResource(ResourceToken.FatalGeometry); - messageBox._imageBrush = ResourceHelper.GetResource(ResourceToken.PrimaryTextBrush); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK); + SetButtonStatus(messageBox, MessageBoxButton.OK); + messageBox._showImage = true; + messageBox._image = ResourceHelper.GetResource(ResourceToken.FatalGeometry); + messageBox._imageBrush = ResourceHelper.GetResource(ResourceToken.PrimaryTextBrush); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } @@ -171,36 +191,79 @@ namespace HandyControl.Controls /// public static MessageBoxResult Ask(string messageBoxText, string caption = null) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel); - SetButtonStatus(messageBox, MessageBoxButton.OKCancel); - SetImage(messageBox, MessageBoxImage.Question); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel); + SetButtonStatus(messageBox, MessageBoxButton.OKCancel); + SetImage(messageBox, MessageBoxImage.Question); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } - public static MessageBoxResult CustomShow(string messageBoxText, string caption = null, MessageBoxButton button = MessageBoxButton.OK, string iconKey = "", string iconBrushKey = "", MessageBoxResult defaultResult = MessageBoxResult.None) + /// + /// 自定义信息展示 + /// + /// + /// + public static MessageBoxResult Show(MessageBoxInfo info) { - var messageBox = CreateMessageBox(null, messageBoxText, caption, button, MessageBoxImage.None, defaultResult); - messageBox._showImage = true; - messageBox._image = ResourceHelper.GetResource(iconKey); - messageBox._imageBrush = ResourceHelper.GetResource(iconBrushKey); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(null, info.MessageBoxText, info.Caption, info.Button, MessageBoxImage.None, info.DefaultResult); + SetButtonStatus(messageBox, info.Button); + + if (!string.IsNullOrEmpty(info.IconKey)) + { + messageBox._showImage = true; + messageBox._image = ResourceHelper.GetResource(info.IconKey); + messageBox._imageBrush = ResourceHelper.GetResource(info.IconBrushKey); + } + + messageBox.Style = info.Style; + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } - public static MessageBoxResult Show(string messageBoxText, string caption = null, MessageBoxButton button = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None, MessageBoxResult defaultResult = MessageBoxResult.None) - { - return Show(null, messageBoxText, caption, button, icon, defaultResult); - } + /// + /// 信息展示 + /// + /// + /// + /// + /// + /// + /// + public static MessageBoxResult Show(string messageBoxText, string caption = null, + MessageBoxButton button = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None, + MessageBoxResult defaultResult = MessageBoxResult.None) => + Show(null, messageBoxText, caption, button, icon, defaultResult); + /// + /// 信息展示 + /// + /// + /// + /// + /// + /// + /// + /// public static MessageBoxResult Show(System.Windows.Window owner, string messageBoxText, string caption = null, MessageBoxButton button = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None, MessageBoxResult defaultResult = MessageBoxResult.None) { - var messageBox = CreateMessageBox(owner, messageBoxText, caption, button, icon, defaultResult); - SetButtonStatus(messageBox, button); - SetImage(messageBox, icon); - messageBox.ShowDialog(); + MessageBox messageBox = null; + Application.Current.Dispatcher.Invoke(() => + { + messageBox = CreateMessageBox(owner, messageBoxText, caption, button, icon, defaultResult); + SetButtonStatus(messageBox, button); + SetImage(messageBox, icon); + messageBox.ShowDialog(); + }); return messageBox._messageBoxResult; } @@ -246,10 +309,10 @@ namespace HandyControl.Controls switch (messageBoxButton) { case MessageBoxButton.OK: - messageBox._showOK = true; + messageBox._showOk = true; break; case MessageBoxButton.OKCancel: - messageBox._showOK = true; + messageBox._showOk = true; messageBox._showCancel = true; break; case MessageBoxButton.YesNo: diff --git a/HandyControl/Data/MessageBoxInfo.cs b/HandyControl/Data/MessageBoxInfo.cs new file mode 100644 index 00000000..f79ace63 --- /dev/null +++ b/HandyControl/Data/MessageBoxInfo.cs @@ -0,0 +1,21 @@ +using System.Windows; + +namespace HandyControl.Data +{ + public class MessageBoxInfo + { + public string MessageBoxText { get; set; } + + public string Caption { get; set; } + + public MessageBoxButton Button { get; set; } = MessageBoxButton.OK; + + public string IconKey { get; set; } + + public string IconBrushKey { get; set; } + + public MessageBoxResult DefaultResult { get; set; } = MessageBoxResult.None; + + public Style Style { get; set; } + } +} \ No newline at end of file diff --git a/HandyControl/Data/ResourceToken.cs b/HandyControl/Data/ResourceToken.cs index e3c9c236..ab9f77ed 100644 --- a/HandyControl/Data/ResourceToken.cs +++ b/HandyControl/Data/ResourceToken.cs @@ -1,68 +1,68 @@ namespace HandyControl.Data { - internal class ResourceToken + public class ResourceToken { - public static readonly string SuccessGeometry = nameof(SuccessGeometry); + public const string SuccessGeometry = nameof(SuccessGeometry); - public static readonly string InfoGeometry = nameof(InfoGeometry); + public const string InfoGeometry = nameof(InfoGeometry); - public static readonly string ErrorGeometry = nameof(ErrorGeometry); + public const string ErrorGeometry = nameof(ErrorGeometry); - public static readonly string WarningGeometry = nameof(WarningGeometry); + public const string WarningGeometry = nameof(WarningGeometry); - public static readonly string AskGeometry = nameof(AskGeometry); + public const string AskGeometry = nameof(AskGeometry); - public static readonly string FatalGeometry = nameof(FatalGeometry); + public const string FatalGeometry = nameof(FatalGeometry); - public static readonly string PrimaryBrush = nameof(PrimaryBrush); + public const string PrimaryBrush = nameof(PrimaryBrush); - public static readonly string SuccessBrush = nameof(SuccessBrush); + public const string SuccessBrush = nameof(SuccessBrush); - public static readonly string InfoBrush = nameof(InfoBrush); + public const string InfoBrush = nameof(InfoBrush); - public static readonly string DangerBrush = nameof(DangerBrush); + public const string DangerBrush = nameof(DangerBrush); - public static readonly string WarningBrush = nameof(WarningBrush); + public const string WarningBrush = nameof(WarningBrush); - public static readonly string AccentBrush = nameof(AccentBrush); + public const string AccentBrush = nameof(AccentBrush); - public static readonly string PrimaryTextBrush = nameof(PrimaryTextBrush); + public const string PrimaryTextBrush = nameof(PrimaryTextBrush); - public static readonly string ThirdlyTextBrush = nameof(ThirdlyTextBrush); + public const string ThirdlyTextBrush = nameof(ThirdlyTextBrush); - public static readonly string BlurGradientValue = nameof(BlurGradientValue); + internal const string BlurGradientValue = nameof(BlurGradientValue); - public static readonly string ButtonCustom = nameof(ButtonCustom); + internal const string ButtonCustom = nameof(ButtonCustom); - public static readonly string PaginationButtonStyle = nameof(PaginationButtonStyle); + internal const string PaginationButtonStyle = nameof(PaginationButtonStyle); - public static readonly string WindowWin10 = nameof(WindowWin10); + internal const string WindowWin10 = nameof(WindowWin10); - public static readonly string AddTagButtonStyle = nameof(AddTagButtonStyle); + internal const string AddTagButtonStyle = nameof(AddTagButtonStyle); - public static readonly string RadioGroupItemDefault = nameof(RadioGroupItemDefault); + internal const string RadioGroupItemDefault = nameof(RadioGroupItemDefault); - public static readonly string RadioGroupItemSingle = nameof(RadioGroupItemSingle); + internal const string RadioGroupItemSingle = nameof(RadioGroupItemSingle); - public static readonly string RadioGroupItemHorizontalFirst = nameof(RadioGroupItemHorizontalFirst); + internal const string RadioGroupItemHorizontalFirst = nameof(RadioGroupItemHorizontalFirst); - public static readonly string RadioGroupItemHorizontalLast = nameof(RadioGroupItemHorizontalLast); + internal const string RadioGroupItemHorizontalLast = nameof(RadioGroupItemHorizontalLast); - public static readonly string RadioGroupItemVerticalFirst = nameof(RadioGroupItemVerticalFirst); + internal const string RadioGroupItemVerticalFirst = nameof(RadioGroupItemVerticalFirst); - public static readonly string RadioGroupItemVerticalLast = nameof(RadioGroupItemVerticalLast); + internal const string RadioGroupItemVerticalLast = nameof(RadioGroupItemVerticalLast); - public static readonly string TabItemCapsuleDefault = nameof(TabItemCapsuleDefault); + internal const string TabItemCapsuleDefault = nameof(TabItemCapsuleDefault); - public static readonly string TabItemCapsuleSingle = nameof(TabItemCapsuleSingle); + internal const string TabItemCapsuleSingle = nameof(TabItemCapsuleSingle); - public static readonly string TabItemCapsuleHorizontalFirst = nameof(TabItemCapsuleHorizontalFirst); + internal const string TabItemCapsuleHorizontalFirst = nameof(TabItemCapsuleHorizontalFirst); - public static readonly string TabItemCapsuleHorizontalLast = nameof(TabItemCapsuleHorizontalLast); + internal const string TabItemCapsuleHorizontalLast = nameof(TabItemCapsuleHorizontalLast); - public static readonly string TabItemCapsuleVerticalFirst = nameof(TabItemCapsuleVerticalFirst); + internal const string TabItemCapsuleVerticalFirst = nameof(TabItemCapsuleVerticalFirst); - public static readonly string TabItemCapsuleVerticalLast = nameof(TabItemCapsuleVerticalLast); + internal const string TabItemCapsuleVerticalLast = nameof(TabItemCapsuleVerticalLast); } } \ No newline at end of file diff --git a/HandyControl/Data/ResourceToken.tt b/HandyControl/Data/ResourceToken.tt index ad53ea13..77ae0102 100644 --- a/HandyControl/Data/ResourceToken.tt +++ b/HandyControl/Data/ResourceToken.tt @@ -48,15 +48,15 @@ namespace HandyControl.Data internal class ResourceToken { <#foreach(var item in geometryList){#> - public static readonly string <#=item#> = nameof(<#=item#>); + public const string <#=item#> = nameof(<#=item#>); <#}#> <#foreach(var item in brushList){#> - public static readonly string <#=item#> = nameof(<#=item#>); + public const string <#=item#> = nameof(<#=item#>); <#}#> <#foreach(var item in styleList){#> - public static readonly string <#=item#> = nameof(<#=item#>); + public const string <#=item#> = nameof(<#=item#>); <#}#> } diff --git a/HandyControl/HandyControl.csproj b/HandyControl/HandyControl.csproj index 26582c8b..1af9c945 100644 --- a/HandyControl/HandyControl.csproj +++ b/HandyControl/HandyControl.csproj @@ -163,6 +163,7 @@ + diff --git a/HandyControl/Themes/Styles/Window.xaml b/HandyControl/Themes/Styles/Window.xaml index f41d26ac..0f4a3cef 100644 --- a/HandyControl/Themes/Styles/Window.xaml +++ b/HandyControl/Themes/Styles/Window.xaml @@ -55,14 +55,16 @@ - - - - + + - - + + + + + + diff --git a/HandyControlDemo/MainWindow.xaml b/HandyControlDemo/MainWindow.xaml index 8688db0c..99344426 100644 --- a/HandyControlDemo/MainWindow.xaml +++ b/HandyControlDemo/MainWindow.xaml @@ -1,23 +1,26 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:controls="clr-namespace:HandyControl.Controls;assembly=HandyControl" + xmlns:userControl="clr-namespace:HandyControlDemo.UserControl" + mc:Ignorable="d" + BorderThickness="1" + BorderBrush="#262e2f" + NonClientAreaBackground="#262e2f" + OtherButtonHoverBackground="#888580" + CloseButtonForeground="White" + OtherButtonHoverForeground="White" + OtherButtonForeground="White" + Style="{StaticResource WindowBlur}" + WindowState="Maximized" + Title="MainWindow" + ResizeMode="CanResizeWithGrip" + Name="MyWindow" + DataContext="{Binding Main,Source={StaticResource Locator}}" + d:DesignHeight="800" + d:DesignWidth="1400"> diff --git a/HandyControlDemo/Properties/Langs/Lang.Designer.cs b/HandyControlDemo/Properties/Langs/Lang.Designer.cs index 67ae02e4..0789abcb 100644 --- a/HandyControlDemo/Properties/Langs/Lang.Designer.cs +++ b/HandyControlDemo/Properties/Langs/Lang.Designer.cs @@ -47,7 +47,7 @@ namespace HandyControlDemo.Properties.Langs { } /// - /// 重写当前线程的 CurrentUICulture 属性 + /// 使用此强类型资源类,为所有资源查找 /// 重写当前线程的 CurrentUICulture 属性。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] @@ -654,6 +654,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 点击打开自定义消息窗口 的本地化字符串。 + /// + public static string OpenCustomMessageWindow { + get { + return ResourceManager.GetString("OpenCustomMessageWindow", resourceCulture); + } + } + /// /// 查找类似 点击打开自定义非客户端区域窗口 的本地化字符串。 /// diff --git a/HandyControlDemo/Properties/Langs/Lang.en.resx b/HandyControlDemo/Properties/Langs/Lang.en.resx index 04e9e197..a036ad33 100644 --- a/HandyControlDemo/Properties/Langs/Lang.en.resx +++ b/HandyControlDemo/Properties/Langs/Lang.en.resx @@ -480,4 +480,7 @@ Upload;Uploading + + open custom message window + \ No newline at end of file diff --git a/HandyControlDemo/Properties/Langs/Lang.resx b/HandyControlDemo/Properties/Langs/Lang.resx index ce90e40f..77e37e89 100644 --- a/HandyControlDemo/Properties/Langs/Lang.resx +++ b/HandyControlDemo/Properties/Langs/Lang.resx @@ -480,4 +480,7 @@ 上传;上传中 + + 点击打开自定义消息窗口 + \ No newline at end of file diff --git a/HandyControlDemo/Resources/Themes/Styles/Style.xaml b/HandyControlDemo/Resources/Themes/Styles/Style.xaml index 11cd7a5e..7cbb1fad 100644 --- a/HandyControlDemo/Resources/Themes/Styles/Style.xaml +++ b/HandyControlDemo/Resources/Themes/Styles/Style.xaml @@ -1,7 +1,8 @@  + xmlns:interactivity="clr-namespace:HandyControl.Interactivity;assembly=HandyControl" + xmlns:langs="clr-namespace:HandyControl.Properties.Langs;assembly=HandyControl"> @@ -90,4 +91,37 @@ + + \ No newline at end of file diff --git a/HandyControlDemo/UserControl/Controls/WindowDemoCtl.xaml b/HandyControlDemo/UserControl/Controls/WindowDemoCtl.xaml index a79f0c29..52dc1d5f 100644 --- a/HandyControlDemo/UserControl/Controls/WindowDemoCtl.xaml +++ b/HandyControlDemo/UserControl/Controls/WindowDemoCtl.xaml @@ -12,6 +12,7 @@