improve growl

According to @ghost1372  suggestion, growl has been improved.
This commit is contained in:
NaBian committed 2018-10-24 14:20:42 +08:00
1 parent fffbdbb4a9
commit b144c2ec39
33 files changed
+409 -77

No files matched your search

+2 -2
View File
@@ -4,6 +4,6 @@
/HandyControl/obj
/HandyControlDemo/bin
/HandyControlDemo/obj
/DockContainerResearch/bin
/DockContainerResearch/obj
/DockBoxResearch/bin
/DockBoxResearch/obj
/HandyControl.sln.DotSettings.user
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+1 -1
View File
@@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControl", "HandyContro
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControlDemo", "HandyControlDemo\HandyControlDemo.csproj", "{9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DockBoxResearch", "DockContainerResearch\DockBoxResearch.csproj", "{8A444D0A-E3DD-446F-95C4-0A132179D20F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DockBoxResearch", "DockBoxResearch\DockBoxResearch.csproj", "{8A444D0A-E3DD-446F-95C4-0A132179D20F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+4 -3
View File
@@ -10,6 +10,7 @@ using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Threading;
using HandyControl.Data;
using HandyControl.Interactivity;
using HandyControl.Tools;
@@ -268,7 +269,7 @@ namespace HandyControl.Controls
{
var button = new Button
{
Style = TryFindResource("ButtonCustom") as Style,
Style = ResourceHelper.GetResource<Style>(ResourceToken.ButtonCustom),
Content = new Border
{
Width = 10,
@@ -277,7 +278,7 @@ namespace HandyControl.Controls
Background = Brushes.White,
Margin = new Thickness(5, 0, 5, 0),
BorderThickness = new Thickness(1),
BorderBrush = TryFindResource("PrimaryBrush") as Brush
BorderBrush = ResourceHelper.GetResource<Brush>(ResourceToken.PrimaryBrush)
}
};
return button;
@@ -289,7 +290,7 @@ namespace HandyControl.Controls
borderOri.Background = Brushes.White;
_selectedButton = e.OriginalSource as Button;
if (_selectedButton != null && _selectedButton.Content is Border border)
border.Background = TryFindResource("PrimaryBrush") as Brush;
border.Background = ResourceHelper.GetResource<Brush>(ResourceToken.PrimaryBrush);
var index = _panelPage.Children.IndexOf(_selectedButton);
if (index != -1)
PageIndex = index;
+183 -34
View File
@@ -6,6 +6,8 @@ using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Threading;
using HandyControl.Data;
using HandyControl.Data.Enum;
using HandyControl.Interactivity;
using HandyControl.Tools;
using HandyControl.Tools.Extension;
@@ -78,18 +80,6 @@ namespace HandyControl.Controls
/// </summary>
private const int MaxTickCount = 6;
public static readonly DependencyProperty MessageProperty = DependencyProperty.Register(
"Message", typeof(string), typeof(Growl), new PropertyMetadata(default(string)));
public static readonly DependencyProperty TimeProperty = DependencyProperty.Register(
"Time", typeof(DateTime), typeof(Growl), new PropertyMetadata(default(DateTime)));
public static readonly DependencyProperty IconProperty = DependencyProperty.Register(
"Icon", typeof(Geometry), typeof(Growl), new PropertyMetadata(default(Geometry)));
public static readonly DependencyProperty IconBrushProperty = DependencyProperty.Register(
"IconBrush", typeof(Brush), typeof(Growl), new PropertyMetadata(default(Brush)));
/// <summary>
/// 消息容器
/// </summary>
@@ -107,6 +97,54 @@ namespace HandyControl.Controls
private Func<bool, bool> ActionBeforeClose { get; set; }
internal static readonly DependencyProperty CancelStrProperty = DependencyProperty.Register(
"CancelStr", typeof(string), typeof(Growl), new PropertyMetadata(default(string)));
internal static readonly DependencyProperty ConfirmStrProperty = DependencyProperty.Register(
"ConfirmStr", typeof(string), typeof(Growl), new PropertyMetadata(default(string)));
public static readonly DependencyProperty ShowDateTimeProperty = DependencyProperty.Register(
"ShowDateTime", typeof(bool), typeof(Growl), new PropertyMetadata(true));
public static readonly DependencyProperty MessageProperty = DependencyProperty.Register(
"Message", typeof(string), typeof(Growl), new PropertyMetadata(default(string)));
public static readonly DependencyProperty TimeProperty = DependencyProperty.Register(
"Time", typeof(DateTime), typeof(Growl), new PropertyMetadata(default(DateTime)));
public static readonly DependencyProperty IconProperty = DependencyProperty.Register(
"Icon", typeof(Geometry), typeof(Growl), new PropertyMetadata(default(Geometry)));
public static readonly DependencyProperty IconBrushProperty = DependencyProperty.Register(
"IconBrush", typeof(Brush), typeof(Growl), new PropertyMetadata(default(Brush)));
public static readonly DependencyProperty TypeProperty = DependencyProperty.Register(
"Type", typeof(InfoType), typeof(Growl), new PropertyMetadata(default(InfoType)));
public InfoType Type
{
get => (InfoType) GetValue(TypeProperty);
set => SetValue(TypeProperty, value);
}
internal string CancelStr
{
get => (string)GetValue(CancelStrProperty);
set => SetValue(CancelStrProperty, value);
}
internal string ConfirmStr
{
get => (string)GetValue(ConfirmStrProperty);
set => SetValue(ConfirmStrProperty, value);
}
public bool ShowDateTime
{
get => (bool)GetValue(ShowDateTimeProperty);
set => SetValue(ShowDateTimeProperty, value);
}
public string Message
{
get => (string)GetValue(MessageProperty);
@@ -211,18 +249,22 @@ namespace HandyControl.Controls
/// <summary>
/// 显示信息
/// </summary>
private static void Show(string message, string iconKey, string iconBrushKey, Func<bool, bool> actionBeforeClose = null,
bool staysOpen = false, bool showCloseButton = true)
/// <param name="growlInfo"></param>
private static void Show(GrowlInfo growlInfo)
{
var ctl = new Growl
{
Message = message,
Message = growlInfo.Message,
Time = DateTime.Now,
Icon = ResourceHelper.GetResource<Geometry>(iconKey),
IconBrush = ResourceHelper.GetResource<Brush>(iconBrushKey),
_showCloseButton = showCloseButton,
ActionBeforeClose = actionBeforeClose,
_staysOpen = staysOpen
Icon = ResourceHelper.GetResource<Geometry>(growlInfo.IconKey),
IconBrush = ResourceHelper.GetResource<Brush>(growlInfo.IconBrushKey),
_showCloseButton = growlInfo.ShowCloseButton,
ActionBeforeClose = growlInfo.ActionBeforeClose,
_staysOpen = growlInfo.StaysOpen,
ShowDateTime = growlInfo.ShowDateTime,
ConfirmStr = growlInfo.ConfirmStr,
CancelStr = growlInfo.CancelStr,
Type = growlInfo.Type
};
GrowlPanel.Children.Insert(0, ctl);
}
@@ -230,38 +272,141 @@ namespace HandyControl.Controls
/// <summary>
/// 成功
/// </summary>
public static void Success(string message) => Show(message, "SuccessGeometry", "SuccessBrush");
/// <param name="message"></param>
public static void Success(string message) => Success(new GrowlInfo
{
Message = message
});
/// <summary>
/// 成功
/// </summary>
/// <param name="growlInfo"></param>
public static void Success(GrowlInfo growlInfo)
{
if (growlInfo == null) throw new NullReferenceException("growlInfo is null");
growlInfo.IconKey = ResourceToken.SuccessGeometry;
growlInfo.IconBrushKey = ResourceToken.SuccessBrush;
growlInfo.Type = InfoType.Success;
Show(growlInfo);
}
/// <summary>
/// 消息
/// </summary>
public static void Info(string message) => Show(message, "InfoGeometry", "InfoBrush");
/// <param name="message"></param>
public static void Info(string message) => Info(new GrowlInfo
{
Message = message
});
/// <summary>
/// 错误
/// 消息
/// </summary>
public static void Error(string message) => Show(message, "ErrorGeometry", "DangerBrush", null, true);
/// <param name="growlInfo"></param>
public static void Info(GrowlInfo growlInfo)
{
if (growlInfo == null) throw new NullReferenceException("growlInfo is null");
growlInfo.IconKey = ResourceToken.InfoGeometry;
growlInfo.IconBrushKey = ResourceToken.InfoBrush;
growlInfo.Type = InfoType.Info;
Show(growlInfo);
}
/// <summary>
/// 警告
/// </summary>
public static void Warning(string message) => Show(message, "WarningGeometry", "WarningBrush");
/// <param name="message"></param>
public static void Warning(string message) => Warning(new GrowlInfo
{
Message = message
});
/// <summary>
/// 警告
/// </summary>
/// <param name="growlInfo"></param>
public static void Warning(GrowlInfo growlInfo)
{
if (growlInfo == null) throw new NullReferenceException("growlInfo is null");
growlInfo.IconKey = ResourceToken.WarningGeometry;
growlInfo.IconBrushKey = ResourceToken.WarningBrush;
growlInfo.Type = InfoType.Warning;
Show(growlInfo);
}
/// <summary>
/// 错误
/// </summary>
/// <param name="message"></param>
public static void Error(string message) => Error(new GrowlInfo
{
Message = message
});
/// <summary>
/// 错误
/// </summary>
/// <param name="growlInfo"></param>
public static void Error(GrowlInfo growlInfo)
{
if (growlInfo == null) throw new NullReferenceException("growlInfo is null");
growlInfo.IconKey = ResourceToken.ErrorGeometry;
growlInfo.IconBrushKey = ResourceToken.DangerBrush;
growlInfo.StaysOpen = true;
growlInfo.Type = InfoType.Error;
Show(growlInfo);
}
/// <summary>
/// 严重
/// </summary>
/// <param name="message"></param>
/// <param name="showContextMenu"></param>
public static void Fatal(string message, bool showContextMenu = true)
public static void Fatal(string message) => Fatal(new GrowlInfo
{
if (!showContextMenu)
{
GrowlPanel.ContextMenu.Collapse();
}
Show(message, "FatalGeometry", "PrimaryTextBrush", null, true, false);
Message = message
});
/// <summary>
/// 严重
/// </summary>
/// <param name="growlInfo"></param>
public static void Fatal(GrowlInfo growlInfo)
{
if (growlInfo == null) throw new NullReferenceException("growlInfo is null");
growlInfo.IconKey = ResourceToken.FatalGeometry;
growlInfo.IconBrushKey = ResourceToken.PrimaryTextBrush;
growlInfo.StaysOpen = true;
growlInfo.ShowCloseButton = false;
growlInfo.Type = InfoType.Fatal;
// ReSharper disable once PossibleNullReferenceException
GrowlPanel.ContextMenu.Opacity = 0;
Show(growlInfo);
}
public static void Ask(string message, Func<bool, bool> actionBeforeClose) => Show(message, "AskGeometry", "AccentBrush", actionBeforeClose);
/// <summary>
/// 询问
/// </summary>
/// <param name="message"></param>
public static void Ask(string message) => Ask(new GrowlInfo
{
Message = message
});
/// <summary>
/// 询问
/// </summary>
/// <param name="growlInfo"></param>
public static void Ask(GrowlInfo growlInfo)
{
if (growlInfo == null) throw new NullReferenceException("growlInfo is null");
growlInfo.IconKey = ResourceToken.AskGeometry;
growlInfo.IconBrushKey = ResourceToken.AccentBrush;
growlInfo.StaysOpen = true;
growlInfo.ShowCloseButton = false;
growlInfo.Type = InfoType.Ask;
Show(growlInfo);
}
private void ButtonClose_OnClick(object sender, RoutedEventArgs e) => Close();
@@ -284,7 +429,11 @@ namespace HandyControl.Controls
public static void Clear()
{
GrowlPanel.Children.Clear();
GrowlPanel.Show();
if (GrowlPanel.ContextMenu != null)
{
GrowlPanel.ContextMenu.IsOpen = false;
GrowlPanel.ContextMenu.Opacity = 1;
}
}
private void ButtonCancel_OnClick(object sender, RoutedEventArgs e)
+7 -7
View File
@@ -29,8 +29,8 @@ namespace HandyControl.Controls
public bool IsRunning
{
get { return (bool) GetValue(IsRunningProperty); }
set { SetValue(IsRunningProperty, value); }
get => (bool) GetValue(IsRunningProperty);
set => SetValue(IsRunningProperty, value);
}
public static readonly DependencyProperty DotCountProperty = DependencyProperty.Register(
@@ -124,11 +124,11 @@ namespace HandyControl.Controls
protected Ellipse CreateEllipse(int index)
{
var ellipse = new Ellipse();
ellipse.SetBinding(WidthProperty, new Binding("DotDiameter") {Source = this});
ellipse.SetBinding(HeightProperty, new Binding("DotDiameter") {Source = this});
ellipse.SetBinding(Shape.FillProperty, new Binding("Foreground") {Source = this});
ellipse.SetBinding(Shape.StrokeThicknessProperty, new Binding("DotBorderThickness") {Source = this});
ellipse.SetBinding(Shape.StrokeProperty, new Binding("DotBorderBrush") {Source = this});
ellipse.SetBinding(WidthProperty, new Binding(DotDiameterProperty.Name) {Source = this});
ellipse.SetBinding(HeightProperty, new Binding(DotDiameterProperty.Name) {Source = this});
ellipse.SetBinding(Shape.FillProperty, new Binding(ForegroundProperty.Name) {Source = this});
ellipse.SetBinding(Shape.StrokeThicknessProperty, new Binding(DotBorderThicknessProperty.Name) {Source = this});
ellipse.SetBinding(Shape.StrokeProperty, new Binding(DotBorderBrushProperty.Name) {Source = this});
return ellipse;
}
}
+14 -13
View File
@@ -4,6 +4,7 @@ using System.Windows.Controls;
using System.Windows.Input;
using HandyControl.Data;
using HandyControl.Interactivity;
using HandyControl.Tools;
using HandyControl.Tools.Extension;
namespace HandyControl.Controls
@@ -261,37 +262,37 @@ namespace HandyControl.Controls
_buttonRight.IsEnabled = PageIndex < MaxPageCount;
if (MaxPageInterval == 0)
{
_buttonFirst.Visibility = Visibility.Collapsed;
_buttonLast.Visibility = Visibility.Collapsed;
_textBlockLeft.Visibility = Visibility.Collapsed;
_textBlockRight.Visibility = Visibility.Collapsed;
_buttonFirst.Collapse();
_buttonLast.Collapse();
_textBlockLeft.Collapse();
_textBlockRight.Collapse();
_panelMain.Children.Clear();
var selectButton = CreateButton(PageIndex);
_panelMain.Children.Add(selectButton);
selectButton.IsChecked = true;
return;
}
_buttonFirst.Visibility = Visibility.Visible;
_buttonLast.Visibility = Visibility.Visible;
_textBlockLeft.Visibility = Visibility.Visible;
_textBlockRight.Visibility = Visibility.Visible;
_buttonFirst.Show();
_buttonLast.Show();
_textBlockLeft.Show();
_textBlockRight.Show();
//更新最后一页
if (MaxPageCount == 1)
{
_buttonLast.Visibility = Visibility.Collapsed;
_buttonLast.Collapse();
}
else
{
_buttonLast.Visibility = Visibility.Visible;
_buttonLast.Show();
_buttonLast.Tag = MaxPageCount.ToString();
}
//更新省略号
var right = MaxPageCount - PageIndex;
var left = PageIndex - 1;
_textBlockRight.Visibility = right > MaxPageInterval ? Visibility.Visible : Visibility.Collapsed;
_textBlockLeft.Visibility = left > MaxPageInterval ? Visibility.Visible : Visibility.Collapsed;
_textBlockRight.Show(right > MaxPageInterval);
_textBlockLeft.Show(left > MaxPageInterval);
//更新中间部分
_panelMain.Children.Clear();
@@ -344,7 +345,7 @@ namespace HandyControl.Controls
{
return new RadioButton
{
Style = FindResource("PaginationButtonStyle") as Style,
Style = ResourceHelper.GetResource<Style>(ResourceToken.PaginationButtonStyle),
Tag = page.ToString()
};
}
+4 -3
View File
@@ -1,6 +1,7 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Tools;
// ReSharper disable once CheckNamespace
@@ -54,15 +55,15 @@ namespace HandyControl.Controls
{
if (Status == true)
{
Foreground = ResourceHelper.GetResource<Brush>("PrimaryTextBrush");
Foreground = ResourceHelper.GetResource<Brush>(ResourceToken.PrimaryTextBrush);
}
else if (Status == false)
{
Foreground = ResourceHelper.GetResource<Brush>("PrimaryBrush");
Foreground = ResourceHelper.GetResource<Brush>(ResourceToken.PrimaryBrush);
}
else
{
Foreground = ResourceHelper.GetResource<Brush>("ThirdlyTextBrush");
Foreground = ResourceHelper.GetResource<Brush>(ResourceToken.ThirdlyTextBrush);
}
}
}
@@ -534,8 +534,6 @@ namespace HandyControl.Controls
}
}
//private void ButtonScreenChange_OnClick(object sender, RoutedEventArgs e) => WindowState = IsFullScreen ? WindowState.Maximized : WindowState.Normal;
private void ButtonClose_OnClick(object sender, RoutedEventArgs e) => Close();
private void GridTop_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+2 -1
View File
@@ -3,6 +3,7 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Interactivity;
using HandyControl.Tools;
@@ -188,7 +189,7 @@ namespace HandyControl.Controls
ContentStr = message,
WindowStartupLocation = WindowStartupLocation.CenterScreen
};
window.Background = window.FindResource("PrimaryBrush") as SolidColorBrush;
window.Background = ResourceHelper.GetResource<Brush>(ResourceToken.PrimaryBrush);
window.Show();
}
@@ -5,6 +5,8 @@ using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shell;
using HandyControl.Data;
using HandyControl.Tools;
// ReSharper disable once CheckNamespace
namespace HandyControl.Controls
@@ -258,14 +260,14 @@ namespace HandyControl.Controls
{
var window = new WindowBorderless
{
Style = Application.Current.TryFindResource("CustomWindowStyle") as Style,
Style = ResourceHelper.GetResource<Style>(ResourceToken.CustomWindowStyle),
Content = content
};
window.Loaded += (s, e) =>
{
window.Width = window.BorderThickness.Left + window.BorderThickness.Right + content.Width;
if (!(window.Template.FindName("GridMenu", window) is Grid nemuArea))
throw new NullReferenceException("在样式中未找到名称为GridMenu的元素");
throw new NullReferenceException("can not find GridMenu in template");
window.Height = window.BorderThickness.Top + window.BorderThickness.Bottom + content.Height +
nemuArea.ActualHeight;
};
+12
View File
@@ -0,0 +1,12 @@
namespace HandyControl.Data.Enum
{
public enum InfoType
{
Success = 0,
Info,
Warning,
Error,
Fatal,
Ask
}
}
+28
View File
@@ -0,0 +1,28 @@
using System;
using HandyControl.Data.Enum;
namespace HandyControl.Data
{
public class GrowlInfo
{
public string Message { get; set; }
public bool ShowDateTime { get; set; } = true;
public string CancelStr { get; set; } = Properties.Langs.Lang.Cancel;
public string ConfirmStr { get; set; } = Properties.Langs.Lang.Confirm;
public Func<bool, bool> ActionBeforeClose { get; set; }
internal InfoType Type { get; set; }
internal string IconKey { get; set; }
internal string IconBrushKey { get; set; }
internal bool StaysOpen { get; set; }
internal bool ShowCloseButton { get; set; } = true;
}
}
+40
View File
@@ -0,0 +1,40 @@
namespace HandyControl.Data
{
internal class ResourceToken
{
public static readonly string SuccessGeometry = nameof(SuccessGeometry);
public static readonly string InfoGeometry = nameof(InfoGeometry);
public static readonly string ErrorGeometry = nameof(ErrorGeometry);
public static readonly string WarningGeometry = nameof(WarningGeometry);
public static readonly string AskGeometry = nameof(AskGeometry);
public static readonly string FatalGeometry = nameof(FatalGeometry);
public static readonly string PrimaryBrush = nameof(PrimaryBrush);
public static readonly string SuccessBrush = nameof(SuccessBrush);
public static readonly string InfoBrush = nameof(InfoBrush);
public static readonly string DangerBrush = nameof(DangerBrush);
public static readonly string WarningBrush = nameof(WarningBrush);
public static readonly string AccentBrush = nameof(AccentBrush);
public static readonly string PrimaryTextBrush = nameof(PrimaryTextBrush);
public static readonly string ThirdlyTextBrush = nameof(ThirdlyTextBrush);
public static readonly string ButtonCustom = nameof(ButtonCustom);
public static readonly string PaginationButtonStyle = nameof(PaginationButtonStyle);
public static readonly string CustomWindowStyle = nameof(CustomWindowStyle);
}
}
+49
View File
@@ -0,0 +1,49 @@
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ import namespace="System.Collections.Generic"#>
<#@ output extension=".cs" #>
<#
var geometryList = new List<string>
{
"SuccessGeometry",
"InfoGeometry",
"ErrorGeometry",
"WarningGeometry",
"AskGeometry",
"FatalGeometry",
"PrimaryBrush"
};
var brushList = new List<string>
{
"SuccessBrush",
"InfoBrush",
"DangerBrush",
"WarningBrush",
"AccentBrush",
"PrimaryTextBrush",
"ThirdlyTextBrush"
};
var styleList = new List<string>
{
"ButtonCustom",
"PaginationButtonStyle",
"CustomWindowStyle"
};
#>
namespace HandyControl.Data
{
internal class ResourceToken
{
<#foreach(var item in geometryList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
<#foreach(var item in brushList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
<#foreach(var item in styleList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
}
}
+16
View File
@@ -59,6 +59,13 @@
<Compile Include="Controls\Loading\LoadingBase.cs" />
<Compile Include="Controls\Loading\LoadingCircle.cs" />
<Compile Include="Controls\Loading\LoadingLine.cs" />
<Compile Include="Data\Enum\InfoType.cs" />
<Compile Include="Data\GrowlInfo.cs" />
<Compile Include="Data\ResourceToken.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>ResourceToken.tt</DependentUpon>
</Compile>
<Compile Include="Tools\SingleOpenHelper.cs" />
<Compile Include="Controls\Steps\StepBar.cs" />
<Compile Include="Controls\Steps\StepItem.cs" />
@@ -432,5 +439,14 @@
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="Data\ResourceToken.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>ResourceToken.cs</LastGenOutput>
</Content>
</ItemGroup>
<ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+5 -4
View File
@@ -5,6 +5,7 @@
xmlns:interactivity="clr-namespace:HandyControl.Interactivity">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Basic/Converters.xaml"/>
<ResourceDictionary Source="../Basic/Geometries.xaml"/>
<ResourceDictionary Source="../Basic/Effects.xaml"/>
<ResourceDictionary Source="TextBlock.xaml"/>
@@ -36,19 +37,19 @@
</Grid.RowDefinitions>
<Border Grid.ColumnSpan="3" Grid.RowSpan="2" Effect="{StaticResource EffectShadow2}" Background="White" CornerRadius="8" Width="320"/>
<Path Grid.Row="0" Grid.Column="0" VerticalAlignment="Top" Margin="0,15,0,0" Width="30" Height="30" Data="{TemplateBinding Icon}" Stretch="Uniform" Fill="{TemplateBinding IconBrush}"/>
<StackPanel Grid.Row="0" Grid.Column="1" Margin="0,12,10,10">
<StackPanel VerticalAlignment="Center" Grid.Row="0" Grid.Column="1" Margin="0,10,10,10">
<TextBlock Text="{TemplateBinding Message}" Style="{StaticResource TextBlockDefault}" HorizontalAlignment="Left" TextWrapping="Wrap"/>
<TextBlock Text="{Binding Time,RelativeSource={RelativeSource FindAncestor,AncestorType=controls:Growl},StringFormat=yyyy/MM/dd HH:mm:ss}" Style="{StaticResource TextBlockDefault}" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Left" Margin="0,4,0,0"/>
<TextBlock Visibility="{Binding ShowDateTime,RelativeSource={RelativeSource TemplatedParent},Converter={StaticResource Boolean2VisibilityConverter}}" Text="{Binding Time,RelativeSource={RelativeSource FindAncestor,AncestorType=controls:Growl},StringFormat=yyyy/MM/dd HH:mm:ss}" Style="{StaticResource TextBlockDefault}" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Left" Margin="0,4,0,0"/>
</StackPanel>
<Button Grid.Row="0" Visibility="Collapsed" Margin="11,0" Name="PART_ButtonClose" Command="interactivity:ControlCommands.Close" Grid.Column="2" Background="Transparent" Style="{StaticResource ButtonCustom}" VerticalAlignment="Center" HorizontalAlignment="Center" Width="18" Height="18">
<Path Data="{StaticResource ErrorGeometry}" Stretch="Uniform" Fill="{DynamicResource SecondaryTextBrush}"/>
</Button>
<StackPanel Name="PART_PanelMore" IsEnabled="False" Visibility="Collapsed" Orientation="Horizontal" Grid.Row="1" Grid.ColumnSpan="3" Height="28" Grid.Column="0">
<Button Command="interactivity:ControlCommands.Cancel" Style="{StaticResource ButtonCustom}" Width="160">
<TextBlock Text="{x:Static langs:Lang.Cancel}" HorizontalAlignment="Center" Foreground="{DynamicResource DangerBrush}"/>
<TextBlock Text="{Binding CancelStr,RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Center" Foreground="{DynamicResource DangerBrush}"/>
</Button>
<Button Command="interactivity:ControlCommands.Confirm" Style="{StaticResource ButtonCustom}" Width="160">
<TextBlock Text="{x:Static langs:Lang.Confirm}" HorizontalAlignment="Center" Foreground="{DynamicResource PrimaryBrush}"/>
<TextBlock Text="{Binding ConfirmStr,RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Center" Foreground="{DynamicResource PrimaryBrush}"/>
</Button>
</StackPanel>
</Grid>
+9
View File
@@ -312,6 +312,15 @@ namespace HandyControlDemo.Properties.Langs {
}
}
/// <summary>
/// 查找类似 忽略 的本地化字符串。
/// </summary>
public static string Ignore {
get {
return ResourceManager.GetString("Ignore", resourceCulture);
}
}
/// <summary>
/// 查找类似 图片浏览器 的本地化字符串。
/// </summary>
@@ -342,4 +342,7 @@
<data name="OpenCustomContentWindow" xml:space="preserve">
<value>open custom content window</value>
</data>
<data name="Ignore" xml:space="preserve">
<value>Ignore</value>
</data>
</root>
@@ -322,4 +322,7 @@
<data name="OpenCustomContentWindow" xml:space="preserve">
<value>点击打开自定义内容窗口</value>
</data>
<data name="Ignore" xml:space="preserve">
<value>忽略</value>
</data>
</root>
@@ -1,6 +1,7 @@
using System;
using GalaSoft.MvvmLight.Command;
using HandyControl.Controls;
using HandyControl.Data;
namespace HandyControlDemo.ViewModel
{
@@ -13,20 +14,37 @@ namespace HandyControlDemo.ViewModel
new RelayCommand(() => Growl.Success(Properties.Langs.Lang.GrowlSuccess))).Value;
public RelayCommand WarningCmd => new Lazy<RelayCommand>(() =>
new RelayCommand(() => Growl.Warning(Properties.Langs.Lang.GrowlWarning))).Value;
new RelayCommand(() => Growl.Warning(new GrowlInfo
{
Message = Properties.Langs.Lang.GrowlWarning,
CancelStr = Properties.Langs.Lang.Ignore,
ActionBeforeClose = isConfirmed =>
{
Growl.Info(isConfirmed.ToString());
return true;
}
}))).Value;
public RelayCommand ErrorCmd => new Lazy<RelayCommand>(() =>
new RelayCommand(() => Growl.Error(Properties.Langs.Lang.GrowlError))).Value;
public RelayCommand AskCmd => new Lazy<RelayCommand>(() =>
new RelayCommand(() => Growl.Ask(Properties.Langs.Lang.GrowlAsk, isClosed =>
new RelayCommand(() => Growl.Ask(new GrowlInfo
{
Growl.Info(isClosed.ToString());
return true;
Message = Properties.Langs.Lang.GrowlAsk,
ActionBeforeClose = isConfirmed =>
{
Growl.Info(isConfirmed.ToString());
return true;
}
}))).Value;
public RelayCommand FatalCmd => new Lazy<RelayCommand>(() =>
new RelayCommand(() => Growl.Fatal(Properties.Langs.Lang.GrowlFatal))).Value;
new RelayCommand(() => Growl.Fatal(new GrowlInfo
{
Message = Properties.Langs.Lang.GrowlFatal,
ShowDateTime = false
}))).Value;
public RelayCommand ClearCmd => new Lazy<RelayCommand>(() =>
new RelayCommand(Growl.Clear)).Value;