From a412c6e04f4bd4cbccb452188eb287378b10cdee Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Tue, 26 Feb 2019 15:02:33 +0800 Subject: [PATCH 01/14] Update HandyControl.sln --- HandyControl.sln | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HandyControl.sln b/HandyControl.sln index f4a066bd..4e0f97fd 100644 --- a/HandyControl.sln +++ b/HandyControl.sln @@ -23,8 +23,8 @@ Global {DC966E3D-BCFF-4652-98CF-070E5494749A}.Debug-Net462|Any CPU.Build.0 = Debug-Net462|Any CPU {DC966E3D-BCFF-4652-98CF-070E5494749A}.Debug-Net47|Any CPU.ActiveCfg = Debug-Net47|Any CPU {DC966E3D-BCFF-4652-98CF-070E5494749A}.Debug-Net47|Any CPU.Build.0 = Debug-Net47|Any CPU - {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net45|Any CPU.ActiveCfg = Release-Net47|Any CPU - {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net45|Any CPU.Build.0 = Release-Net47|Any CPU + {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net45|Any CPU.ActiveCfg = Release-Net45|Any CPU + {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net45|Any CPU.Build.0 = Release-Net45|Any CPU {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net462|Any CPU.ActiveCfg = Release-Net462|Any CPU {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net462|Any CPU.Build.0 = Release-Net462|Any CPU {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net47|Any CPU.ActiveCfg = Release-Net47|Any CPU From fe34250afaa051723a8fb79039a027ff18bc0b4f Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Tue, 26 Feb 2019 20:22:15 +0800 Subject: [PATCH 02/14] update readme --- README.md | 9 +++++++++ Resources/chinacharityfederation.png | Bin 0 -> 14285 bytes 2 files changed, 9 insertions(+) create mode 100644 Resources/chinacharityfederation.png diff --git a/README.md b/README.md index 581f96ac..bc4780ae 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,15 @@ ![qq-group](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/qq-group.png) +## 捐赠 +如果您觉得HandyControl还不错,那么就以HandyControl的名义,花一顿饭的钱来为慈善事业做一份贡献吧(捐赠留言写:HandyControl),谢谢大家。 + +捐赠链接: +![中华慈善总会](http://www.chinacharityfederation.org/ConfirmDonation/0.html?zhijie=3) + +也可以扫下面的二维码: +![中华慈善总会](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/chinacharityfederation.png) + ## Usage Step 1:Add a reference to HandyControl or search for HandyControl on the nuget; diff --git a/Resources/chinacharityfederation.png b/Resources/chinacharityfederation.png new file mode 100644 index 0000000000000000000000000000000000000000..70ac977e6d0ddc74fa4ce00f47d8062f0154fe1e GIT binary patch literal 14285 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 X>iDUYtrqAJJQz6{CFv?jqk#VbU!~9O literal 0 HcmV?d00001 From c83674abf5eb9b856f2ba8d11019c75060587813 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Tue, 26 Feb 2019 20:24:10 +0800 Subject: [PATCH 03/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bc4780ae..51890494 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ 如果您觉得HandyControl还不错,那么就以HandyControl的名义,花一顿饭的钱来为慈善事业做一份贡献吧(捐赠留言写:HandyControl),谢谢大家。 捐赠链接: -![中华慈善总会](http://www.chinacharityfederation.org/ConfirmDonation/0.html?zhijie=3) +[中华慈善总会](http://www.chinacharityfederation.org/ConfirmDonation/0.html?zhijie=3) 也可以扫下面的二维码: ![中华慈善总会](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/chinacharityfederation.png) From 5d8e4e566a13c89d213a08c33990a2e7c73f7f0f Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 3 Mar 2019 16:12:12 +0800 Subject: [PATCH 04/14] add Gravatar --- HandyControl/Controls/Attach/BorderElement.cs | 43 +++++- HandyControl/Controls/Attach/VisualElement.cs | 2 +- .../Controls/Base/IGravatarGenerator.cs | 7 + HandyControl/Controls/Other/Badge.cs | 9 ++ HandyControl/Controls/Other/Dialog.cs | 9 ++ HandyControl/Controls/Other/Gravatar.cs | 51 +++++++ HandyControl/HandyControl.csproj | 15 ++ HandyControl/Properties/Langs/Lang.en.resx | 141 ++++++++---------- HandyControl/Themes/Basic/Converters.xaml | 2 + .../Themes/Styles/Base/GravatarBaseStyle.xaml | 22 +++ HandyControl/Themes/Styles/Border.xaml | 23 ++- HandyControl/Themes/Styles/Gravatar.xaml | 29 ++++ HandyControl/Themes/Styles/Style.xaml | 1 + .../Converter/BorderCircularConverter.cs | 31 ++++ .../Tools/Converter/BorderClipConverter.cs | 36 +++++ HandyControl/Tools/GithubGravatarGenerator.cs | 119 +++++++++++++++ HandyControlDemo/Data/MessageToken.cs | 4 + HandyControlDemo/Data/MessageToken.tt | 4 +- HandyControlDemo/HandyControlDemo.csproj | 24 +++ .../Properties/Langs/Lang.Designer.cs | 29 +++- .../Properties/Langs/Lang.en.resx | 9 ++ HandyControlDemo/Properties/Langs/Lang.resx | 9 ++ .../Img/LeftMainContent/DotLarge_16x.png | Bin 0 -> 323 bytes .../Img/LeftMainContent/User_16x.png | Bin 0 -> 200 bytes .../Resources/Img/under_construction.gif | Bin 0 -> 934621 bytes .../UserControl/Controls/BadgeDemoCtl.xaml | 6 + .../UserControl/Controls/BadgeDemoCtl.xaml.cs | 10 ++ .../UserControl/Controls/GifImageDemoCtl.xaml | 8 +- .../UserControl/Controls/GravatarDemoCtl.xaml | 27 ++++ .../Controls/GravatarDemoCtl.xaml.cs | 10 ++ .../UserControl/Main/LeftMainContent.xaml | 14 +- .../UserControl/Main/UnderConstruction.xaml | 17 +++ .../Main/UnderConstruction.xaml.cs | 10 ++ README.md | 8 +- Resources/Gravatar.gif | Bin 0 -> 30064 bytes 35 files changed, 636 insertions(+), 93 deletions(-) create mode 100644 HandyControl/Controls/Base/IGravatarGenerator.cs create mode 100644 HandyControl/Controls/Other/Badge.cs create mode 100644 HandyControl/Controls/Other/Dialog.cs create mode 100644 HandyControl/Controls/Other/Gravatar.cs create mode 100644 HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml create mode 100644 HandyControl/Themes/Styles/Gravatar.xaml create mode 100644 HandyControl/Tools/Converter/BorderCircularConverter.cs create mode 100644 HandyControl/Tools/Converter/BorderClipConverter.cs create mode 100644 HandyControl/Tools/GithubGravatarGenerator.cs create mode 100644 HandyControlDemo/Resources/Img/LeftMainContent/DotLarge_16x.png create mode 100644 HandyControlDemo/Resources/Img/LeftMainContent/User_16x.png create mode 100644 HandyControlDemo/Resources/Img/under_construction.gif create mode 100644 HandyControlDemo/UserControl/Controls/BadgeDemoCtl.xaml create mode 100644 HandyControlDemo/UserControl/Controls/BadgeDemoCtl.xaml.cs create mode 100644 HandyControlDemo/UserControl/Controls/GravatarDemoCtl.xaml create mode 100644 HandyControlDemo/UserControl/Controls/GravatarDemoCtl.xaml.cs create mode 100644 HandyControlDemo/UserControl/Main/UnderConstruction.xaml create mode 100644 HandyControlDemo/UserControl/Main/UnderConstruction.xaml.cs create mode 100644 Resources/Gravatar.gif diff --git a/HandyControl/Controls/Attach/BorderElement.cs b/HandyControl/Controls/Attach/BorderElement.cs index 05db296b..c0352bf9 100644 --- a/HandyControl/Controls/Attach/BorderElement.cs +++ b/HandyControl/Controls/Attach/BorderElement.cs @@ -1,4 +1,9 @@ -using System.Windows; +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using HandyControl.Data; +using HandyControl.Tools.Converter; namespace HandyControl.Controls { @@ -10,5 +15,41 @@ namespace HandyControl.Controls public static void SetCornerRadius(DependencyObject element, CornerRadius value) => element.SetValue(CornerRadiusProperty, value); public static CornerRadius GetCornerRadius(DependencyObject element) => (CornerRadius)element.GetValue(CornerRadiusProperty); + + public static readonly DependencyProperty CircularProperty = DependencyProperty.RegisterAttached( + "Circular", typeof(bool), typeof(BorderElement), new PropertyMetadata(ValueBoxes.FalseBox, OnCircularChanged)); + + private static void OnCircularChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is Border border) + { + if ((bool)e.NewValue) + { + border.SetBinding(FrameworkElement.MinWidthProperty, + new Binding(FrameworkElement.ActualWidthProperty.Name) { Source = border }); + border.SetBinding(FrameworkElement.MinHeightProperty, + new Binding(FrameworkElement.ActualHeightProperty.Name) { Source = border }); + var binding = new MultiBinding + { + Converter = new BorderCircularConverter() + }; + binding.Bindings.Add(new Binding(FrameworkElement.ActualWidthProperty.Name) {Source = border}); + binding.Bindings.Add(new Binding(FrameworkElement.ActualHeightProperty.Name) { Source = border }); + border.SetBinding(Border.CornerRadiusProperty, binding); + } + else + { + BindingOperations.ClearBinding(border, FrameworkElement.MinWidthProperty); + BindingOperations.ClearBinding(border, FrameworkElement.MinHeightProperty); + BindingOperations.ClearBinding(border, Border.CornerRadiusProperty); + } + } + } + + public static void SetCircular(DependencyObject element, bool value) + => element.SetValue(CircularProperty, value); + + public static bool GetCircular(DependencyObject element) + => (bool) element.GetValue(CircularProperty); } } \ No newline at end of file diff --git a/HandyControl/Controls/Attach/VisualElement.cs b/HandyControl/Controls/Attach/VisualElement.cs index 511922bc..2e748dae 100644 --- a/HandyControl/Controls/Attach/VisualElement.cs +++ b/HandyControl/Controls/Attach/VisualElement.cs @@ -12,6 +12,6 @@ namespace HandyControl.Controls => element.SetValue(HighlightBrushProperty, value); public static Brush GetHighlightBrush(DependencyObject element) - => (Brush) element.GetValue(HighlightBrushProperty); + => (Brush) element.GetValue(HighlightBrushProperty); } } \ No newline at end of file diff --git a/HandyControl/Controls/Base/IGravatarGenerator.cs b/HandyControl/Controls/Base/IGravatarGenerator.cs new file mode 100644 index 00000000..37ddca34 --- /dev/null +++ b/HandyControl/Controls/Base/IGravatarGenerator.cs @@ -0,0 +1,7 @@ +namespace HandyControl.Controls +{ + public interface IGravatarGenerator + { + object GetGravatar(string id); + } +} \ No newline at end of file diff --git a/HandyControl/Controls/Other/Badge.cs b/HandyControl/Controls/Other/Badge.cs new file mode 100644 index 00000000..0eaf688b --- /dev/null +++ b/HandyControl/Controls/Other/Badge.cs @@ -0,0 +1,9 @@ +using System.Windows.Controls; + +namespace HandyControl.Controls +{ + public class Badge : ContentControl + { + + } +} \ No newline at end of file diff --git a/HandyControl/Controls/Other/Dialog.cs b/HandyControl/Controls/Other/Dialog.cs new file mode 100644 index 00000000..1b6f1bc0 --- /dev/null +++ b/HandyControl/Controls/Other/Dialog.cs @@ -0,0 +1,9 @@ +using System.Windows.Controls; + +namespace HandyControl.Controls +{ + public class Dialog : ContentControl + { + + } +} \ No newline at end of file diff --git a/HandyControl/Controls/Other/Gravatar.cs b/HandyControl/Controls/Other/Gravatar.cs new file mode 100644 index 00000000..1ba9da89 --- /dev/null +++ b/HandyControl/Controls/Other/Gravatar.cs @@ -0,0 +1,51 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using HandyControl.Tools; + +namespace HandyControl.Controls +{ + public class Gravatar : ContentControl + { + public static readonly DependencyProperty GeneratorProperty = DependencyProperty.Register( + "Generator", typeof(IGravatarGenerator), typeof(Gravatar), new PropertyMetadata(new GithubGravatarGenerator())); + + public IGravatarGenerator Generator + { + get => (IGravatarGenerator) GetValue(GeneratorProperty); + set => SetValue(GeneratorProperty, value); + } + + public static readonly DependencyProperty IdProperty = DependencyProperty.Register( + "Id", typeof(string), typeof(Gravatar), new PropertyMetadata(default(string), OnIdChanged)); + + private static void OnIdChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var ctl = (Gravatar) d; + if (ctl.Source != null) return; + ctl.Content = ctl.Generator.GetGravatar((string)e.NewValue); + } + + public string Id + { + get => (string) GetValue(IdProperty); + set => SetValue(IdProperty, value); + } + + + public static readonly DependencyProperty SourceProperty = DependencyProperty.Register( + "Source", typeof(ImageSource), typeof(Gravatar), new PropertyMetadata(default(ImageSource), OnSourceChanged)); + + private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var ctl = (Gravatar)d; + ctl.Background = new ImageBrush((ImageSource)e.NewValue); + } + + public ImageSource Source + { + get => (ImageSource) GetValue(SourceProperty); + set => SetValue(SourceProperty, value); + } + } +} \ No newline at end of file diff --git a/HandyControl/HandyControl.csproj b/HandyControl/HandyControl.csproj index efbf174e..4f14d102 100644 --- a/HandyControl/HandyControl.csproj +++ b/HandyControl/HandyControl.csproj @@ -86,6 +86,7 @@ + @@ -108,10 +109,13 @@ + + + @@ -174,8 +178,11 @@ + + + @@ -384,6 +391,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -436,6 +447,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/HandyControl/Properties/Langs/Lang.en.resx b/HandyControl/Properties/Langs/Lang.en.resx index b5f9a98b..28b6a0dc 100644 --- a/HandyControl/Properties/Langs/Lang.en.resx +++ b/HandyControl/Properties/Langs/Lang.en.resx @@ -1,95 +1,76 @@  + Microsoft ResX Schema + + Version 1.3 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + text/microsoft-resx + 1.3 + System.Resources.ResXResourceReader, System.Windows.Forms, ... + System.Resources.ResXResourceWriter, System.Windows.Forms, ... + this is my long string + Blue + + [base64 mime encoded serialized .NET Framework object] + + + [base64 mime encoded string representing a byte array form of the .NET Framework object] + + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> - - - - - - - - - - - - - - - - - - - + - @@ -108,13 +89,13 @@ text/microsoft-resx - 2.0 + 1.3 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Confirm diff --git a/HandyControl/Themes/Basic/Converters.xaml b/HandyControl/Themes/Basic/Converters.xaml index 8a4d418f..57809fe9 100644 --- a/HandyControl/Themes/Basic/Converters.xaml +++ b/HandyControl/Themes/Basic/Converters.xaml @@ -15,5 +15,7 @@ + + \ No newline at end of file diff --git a/HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml b/HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml new file mode 100644 index 00000000..861062d2 --- /dev/null +++ b/HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/HandyControl/Themes/Styles/Border.xaml b/HandyControl/Themes/Styles/Border.xaml index 4163cef3..27557b46 100644 --- a/HandyControl/Themes/Styles/Border.xaml +++ b/HandyControl/Themes/Styles/Border.xaml @@ -1,6 +1,11 @@  + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:controls="clr-namespace:HandyControl.Controls"> + + + + + + + + \ No newline at end of file diff --git a/HandyControl/Themes/Styles/Gravatar.xaml b/HandyControl/Themes/Styles/Gravatar.xaml new file mode 100644 index 00000000..7c400cdb --- /dev/null +++ b/HandyControl/Themes/Styles/Gravatar.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/HandyControl/Themes/Styles/Style.xaml b/HandyControl/Themes/Styles/Style.xaml index dfc27adc..50479527 100644 --- a/HandyControl/Themes/Styles/Style.xaml +++ b/HandyControl/Themes/Styles/Style.xaml @@ -58,6 +58,7 @@ + \ No newline at end of file diff --git a/HandyControl/Tools/Converter/BorderCircularConverter.cs b/HandyControl/Tools/Converter/BorderCircularConverter.cs new file mode 100644 index 00000000..b7170562 --- /dev/null +++ b/HandyControl/Tools/Converter/BorderCircularConverter.cs @@ -0,0 +1,31 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace HandyControl.Tools.Converter +{ + public class BorderCircularConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + if (values.Length == 2 && values[0] is double width && values[1] is double height) + { + if (width < double.Epsilon || height < double.Epsilon) + { + return new CornerRadius(); + } + + var min = Math.Min(width, height); + return new CornerRadius(min/2); + } + + return DependencyProperty.UnsetValue; + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/HandyControl/Tools/Converter/BorderClipConverter.cs b/HandyControl/Tools/Converter/BorderClipConverter.cs new file mode 100644 index 00000000..4b17a7f7 --- /dev/null +++ b/HandyControl/Tools/Converter/BorderClipConverter.cs @@ -0,0 +1,36 @@ +//referenced from https://stackoverflow.com/a/5650367/9639378 + +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; +using System.Windows.Media; + +namespace HandyControl.Tools.Converter +{ + public class BorderClipConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + if (values.Length == 3 && values[0] is double width && values[1] is double height && values[2] is CornerRadius radius) + { + if (width < double.Epsilon || height < double.Epsilon) + { + return Geometry.Empty; + } + + var clip = new RectangleGeometry(new Rect(0, 0, width, height), radius.TopLeft, radius.TopLeft); + clip.Freeze(); + + return clip; + } + + return DependencyProperty.UnsetValue; + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/HandyControl/Tools/GithubGravatarGenerator.cs b/HandyControl/Tools/GithubGravatarGenerator.cs new file mode 100644 index 00000000..30d0808c --- /dev/null +++ b/HandyControl/Tools/GithubGravatarGenerator.cs @@ -0,0 +1,119 @@ +using System; +using System.Globalization; +using System.Security.Cryptography; +using System.Text; +using System.Windows; +using System.Windows.Media; +using System.Windows.Shapes; +using HandyControl.Controls; + +namespace HandyControl.Tools +{ + public class GithubGravatarGenerator : IGravatarGenerator + { + private const int RenderDataMaxLength = 15; + + public object GetGravatar(string id) + { + var hashcode = GetHashCode(id); + var renderData = GetRenderData(hashcode); + var renderBrush = GetRenderBrush(hashcode); + var geometryGroup = new GeometryGroup(); + + void AddRec(int i, int j, bool hidden = false) + { + var rec = new RectangleGeometry(new Rect(new Point(i, j), hidden ? new Size() : new Size(1, 1))); + geometryGroup.Children.Add(rec); + } + + var index = 0; + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 5; j++, index++) + { + AddRec(i, j, renderData[index] == 0); + } + } + + for (int j = 0; j < 5; j++, index++) + { + AddRec(2, j, renderData[index] == 0); + } + + index -= 10; + for (int i = 3; i < 5; i++) + { + for (int j = 0; j < 5; j++, index++) + { + AddRec(i, j, renderData[index] == 0); + } + index -= 10; + } + + var path = new Path + { + Data = geometryGroup, + Fill = renderBrush, + VerticalAlignment = VerticalAlignment.Top + }; + + RenderOptions.SetEdgeMode(path, EdgeMode.Aliased); + + return path; + } + + private string GetHashCode(string id) + { + var md5 = MD5.Create(); + var bytes = Encoding.ASCII.GetBytes(id); + var hash = md5.ComputeHash(bytes); + var stringBuilder = new StringBuilder(); + foreach (var item in hash) + { + stringBuilder.Append(item.ToString("X2")); + } + return stringBuilder.ToString(); + } + + private int[] GetRenderData(string hashcode) + { + var arr = new int[RenderDataMaxLength]; + for (int i = 0; i < RenderDataMaxLength; i++) + { + var c = hashcode[i]; + var v = (int) c; + arr[i] = v % 2; + } + + return arr; + } + + private Brush GetRenderBrush(string hashcode) + { + var v = (double)int.Parse(hashcode.Substring(hashcode.Length - 7), NumberStyles.HexNumber); + var scale = v / 0xfffffff; + var color = Hsl2Rgb(scale); + return new SolidColorBrush(color); + } + + //adapted from https://github.com/stewartlord/identicon.js/blob/4fad7cafec1b7a4d896015e084e861625ef5d64f/identicon.js#L110 + private Color Hsl2Rgb(double h, double s = 0.7, double b = 0.5) + { + h *= 6; + var arr = new[] + { + b += s *= b < .5 ? b : 1 - b, + b - h % 1 * s * 2, + b -= s *= 2, + b, + b + h % 1 * s, + b + s + }; + + var hValue = (int) Math.Floor(h); + + return Color.FromRgb((byte) (arr[hValue % 6] * 255), (byte) (arr[(hValue | 16) % 6] * 255), + (byte) (arr[(hValue | 8) % 6] * 255)); + } + } +} \ No newline at end of file diff --git a/HandyControlDemo/Data/MessageToken.cs b/HandyControlDemo/Data/MessageToken.cs index e63c9770..529716b5 100644 --- a/HandyControlDemo/Data/MessageToken.cs +++ b/HandyControlDemo/Data/MessageToken.cs @@ -84,6 +84,10 @@ public static readonly string GotoTopDemoCtl = nameof(GotoTopDemoCtl); + public static readonly string BadgeDemoCtl = nameof(BadgeDemoCtl); + + public static readonly string GravatarDemoCtl = nameof(GravatarDemoCtl); + public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl); public static readonly string ToggleButtonDemoCtl = nameof(ToggleButtonDemoCtl); diff --git a/HandyControlDemo/Data/MessageToken.tt b/HandyControlDemo/Data/MessageToken.tt index 377d9b64..3af06d18 100644 --- a/HandyControlDemo/Data/MessageToken.tt +++ b/HandyControlDemo/Data/MessageToken.tt @@ -44,7 +44,9 @@ var controlList = new List "ProgressButtonDemoCtl", "TransferDemoCtl", "ChatBubbleDemoCtl", - "GotoTopDemoCtl" + "GotoTopDemoCtl", + "BadgeDemoCtl", + "GravatarDemoCtl" }; var styleList = new List { diff --git a/HandyControlDemo/HandyControlDemo.csproj b/HandyControlDemo/HandyControlDemo.csproj index fb8411db..464bacdc 100644 --- a/HandyControlDemo/HandyControlDemo.csproj +++ b/HandyControlDemo/HandyControlDemo.csproj @@ -133,6 +133,9 @@ AnimationPathDemoCtl.xaml + + BadgeDemoCtl.xaml + CalendarWithClockDemoCtl.xaml @@ -178,6 +181,9 @@ GotoTopDemoCtl.xaml + + GravatarDemoCtl.xaml + OutlineTextDemoCtl.xaml @@ -247,6 +253,9 @@ QQGroupView.xaml + + UnderConstruction.xaml + BorderDemoCtl.xaml @@ -435,6 +444,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -495,6 +508,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -587,6 +604,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -753,6 +774,9 @@ TextTemplatingFileGenerator MessageToken.cs + + + diff --git a/HandyControlDemo/Properties/Langs/Lang.Designer.cs b/HandyControlDemo/Properties/Langs/Lang.Designer.cs index 44d750f8..70097234 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)] @@ -87,6 +87,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 标记 的本地化字符串。 + /// + public static string Badge { + get { + return ResourceManager.GetString("Badge", resourceCulture); + } + } + /// /// 查找类似 填写基本信息 的本地化字符串。 /// @@ -258,6 +267,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 敬请期待 的本地化字符串。 + /// + public static string ComingSoon { + get { + return ResourceManager.GetString("ComingSoon", resourceCulture); + } + } + /// /// 查找类似 一般 的本地化字符串。 /// @@ -447,6 +465,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 头像 的本地化字符串。 + /// + public static string Gravatar { + get { + return ResourceManager.GetString("Gravatar", resourceCulture); + } + } + /// /// 查找类似 分组框 的本地化字符串。 /// diff --git a/HandyControlDemo/Properties/Langs/Lang.en.resx b/HandyControlDemo/Properties/Langs/Lang.en.resx index 3f57a795..b2b8e53a 100644 --- a/HandyControlDemo/Properties/Langs/Lang.en.resx +++ b/HandyControlDemo/Properties/Langs/Lang.en.resx @@ -501,4 +501,13 @@ GotoTop + + Badge + + + Gravatar + + + Coming Soon + \ No newline at end of file diff --git a/HandyControlDemo/Properties/Langs/Lang.resx b/HandyControlDemo/Properties/Langs/Lang.resx index 32ab263a..dfc893e1 100644 --- a/HandyControlDemo/Properties/Langs/Lang.resx +++ b/HandyControlDemo/Properties/Langs/Lang.resx @@ -501,4 +501,13 @@ 回到顶部 + + 标记 + + + 头像 + + + 敬请期待 + \ No newline at end of file diff --git a/HandyControlDemo/Resources/Img/LeftMainContent/DotLarge_16x.png b/HandyControlDemo/Resources/Img/LeftMainContent/DotLarge_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..c588ac0117283fa02317089195fa596da565eb14 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAQ1Gj# zi(^Pd+|l5TYnu&3wk!_0P{DG9B~sB=sKg_ro+->>%>kyDD;ilP9_BY}V$^H6R@pA+ z<42<^NyVD=4eI`vuRO2h+dSiW<>YJD78x#IKHS>pc(HV@RGXuW zXeLL{hg(dOw&k|2zA^a*lZacXX!R7;2Y=);?th=l`{v@d2DQHAbcSlFXos1pGx-jG z*dQro^P!IQL)+cet1hKH3cR1(+|0&by|O~J@qDY24TthU1Gi^QwfEouKPF!Bw)1>R T?S^z<05EvE`njxgN@xNAKf8hZ literal 0 HcmV?d00001 diff --git a/HandyControlDemo/Resources/Img/LeftMainContent/User_16x.png b/HandyControlDemo/Resources/Img/LeftMainContent/User_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..391e91e48cfe822f4d51db9c514ab63c817f9efa GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpkS4! zi(^Pd+}lYfIS(j^xC94fZD=Yu{?2fn+XusrWR-J@*RSM8wl w@8;a*u9(@&IN`h8!+gdm*MBgs|Jy7om$fu(mCvqkKvyt$y85}Sb4q9e0OqMpumAu6 literal 0 HcmV?d00001 diff --git a/HandyControlDemo/Resources/Img/under_construction.gif b/HandyControlDemo/Resources/Img/under_construction.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5efd6d84ebde01a7580de452cc9d686ed6ad055 GIT binary patch literal 934621 zcmaI61yCH(yXZMExF><&gpdG1gIj>$Zb5>(4l)c3?ykcC!QI{6-Q8V-yCo1T%;tah z-S>8@_HI{K_36`}p7VA0>8_u&tP~%=aSReO(jNezqOjW8GNC-FG)75frW8EgB;R0T z(;UtcV+9F!Egnu{8ZECK^t36^F-^2&=m>I7)HbEY`!HU{6|KtPkl2%$Tx`rOUE&_m z7%4Yd5UijGg{Xs_rB#y)>z(C4B!{Ie^sA1#ZYm#Y>7HL~Hmm2M>khHd8 z_YaE+R*~^(L4x8S!Z#(MW{WV;aA;g+ko*9gD#1D_Gnm8ESUNm7vI)dhn&>*{8B&^P zG6;i?H294)W#xM2FTp|#481#hC;P1pC*wU+6GEK~a~BJO)b;ZQK+wtbpv3~%e2eR0 zLDXVn_F{U_OwX6Ge5%9Lh(VZVx6ZdIPt(C5Xlg;OiF@;8y5}Sey4hGC86P8^u8o)tDW6{a@&x+)!>HXTrC z2h?UU9adp#x)|@7XKFf`9+huuGYPX9jE4@uY$|L_2IGSkxPwwUg?SrD~Z5I7lR)8T1684vG-n&#TtO#bI;&?L-cGu=PW#-zi;XE5Du zGRS!|J*p38RO{(8lNmG?@6#LUG92sKALTmo!>cF4c{I*@JjrJ|BXBasZz#rNBH4EU z?lu_h-WTqSKp@^Du$3g$)xh|`w|2>K-R`yQz zP%C=~wYd0yMva&HlO_mkX737R_%9trMFCkb)X5lZYA!1wMDx!ID+pvJz{}3h#wo?g zCeAL-#?CIuE6U5qCn+v2$}Ppo!OkYh^WVA>_NLBu=3uA));0S-y6pd>?tjX`4)V{l zgt;Tg#oSEF(cX^wztR=}{g1J5NdAxZ{+F)V{}>C0)c>ga`Cl-f|1-J&kIDY;u74Hu zpXUEA-G3+lyZFt)|0>?`Uuh#DUj9BmJwDw3xx4-S>*o6E^5XpL^yK*H@L+#$cjxE! z*5=0g+Um;k(&EDW-0aNs)a1nY*yzac(BMFSUvE!$S7%3iTWd>mQ)5GYU2RQuRb@qa zS!qdeQDH%TUT#iyR%S+eT53viQer}U+>h9pXm}JXG9o-IG$c4EFu>o>*T>t-)5G1( z)y3Hf>gWKm2iw`&Sc9xAEzHeKO^l5U4fOSNb+olKziX(gseV&YR#H@umy?x|mXeeZ z7ZVlvDl8=UMS!1=mxr6{Ka=~Jm4%s!k>L|P9qq>tH1Db3QBhKmlaZ1Tza=7k^ZFG5 zJ{~R(HWnrZIvOep5c%H&;{5{(DhdDrVE*^40Q~1Q3cx@BjtgGPRBwv}V&F3>3|IdY z3nlmu8=uLF5|JjbfHYE&U$0Cp=_zjs4t>GuCaWj&UCI+ zf2^@$t;uS4G(*0Lb-m5)*XqVtQ`J_N2N0VIr@8uPUl=BnL3(q|?obS=d?rOp?fzIY zgU#f4OWonrH}OC!#n$@ciDI=ZgNfFLlcj3YwoFA`C%ctq=+vWeUJKFx7Z}mkY-YIvsKm0nHD>Izx?0Bk}Hyia; z?s|b3UjGVgnnFBQSU>J_82X~Tm09tAqkxoBm|CPgqU7g`{ot99z908f`kP}vVb#GFM*{i3x^auI9bNlM!5mXd_(fM1No zIh)pJHU6(l%L+;?=4{9{7)M1i``+4|m;W-;jjJ8Mcsy&G50O7>sDaCaq3Rc$FHWk zTX8r>I1bD4$E7rrYzBqjJ=RX|(CBkb@J*@SE@)X+aL*`de88F7ylHdz!E$(J|5Z(` zqhZyi>6~Xt`KRX5x-l>A?c9P`RO3AR7-IBp%@2L^&$cfyUQ*A-q+Qe83=d3o#j6On zX*)zyiC=S&;`+8#!4k~7!YnFWzn7@%?S32==#0ISzI5I)MfH`+W0NA2(tS3+sI%#~ z=#K$my%Ez(Ye4lEpFg?vTk!ph(Wl9_t?4|fzrSZS5$(72`c)mj*3%OBOOpdGA9u

Ob4^D+Vo&Z6H?a9(2k1NVvisa;*xpb+h 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