From e24afe88fec4891598566c300b5cf9054f25480e Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 6 May 2020 23:00:42 +0800 Subject: [PATCH 01/94] Update LangExtension.cs --- .../Tools/Extension/LangExtension.cs | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs b/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs index 1ec15c19d..4b7a1f0e9 100644 --- a/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs +++ b/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs @@ -10,8 +10,6 @@ public class LangExtension : MarkupExtension { private readonly DependencyObject _proxy; - private bool _isInternalAction; - public LangExtension() { _proxy = new DependencyObject(); @@ -51,7 +49,6 @@ private static DependencyProperty GetTargetProperty(DependencyObject element) public override object ProvideValue(IServiceProvider serviceProvider) { - if (_isInternalAction) return this; if (!(serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget provideValueTarget)) return this; if (provideValueTarget.TargetObject.GetType().FullName == "System.Windows.SharedDp") return this; if (!(provideValueTarget.TargetObject is DependencyObject targetObject)) return this; @@ -61,14 +58,7 @@ public override object ProvideValue(IServiceProvider serviceProvider) { case string key: { - var binding = new Binding(key) - { - Converter = Converter, - ConverterParameter = ConverterParameter, - UpdateSourceTrigger = UpdateSourceTrigger.Explicit, - Source = Source, - Mode = BindingMode.OneWay - }; + var binding = CreateLangBinding(key); BindingOperations.SetBinding(targetObject, targetProperty, binding); return binding.ProvideValue(serviceProvider); } @@ -76,10 +66,8 @@ public override object ProvideValue(IServiceProvider serviceProvider) { if (element.DataContext != null) { - _isInternalAction = true; - SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); - _isInternalAction = false; - return element.GetValue(targetProperty); + var binding = SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); + return binding.ProvideValue(serviceProvider); } SetTargetProperty(element, targetProperty); @@ -91,10 +79,8 @@ public override object ProvideValue(IServiceProvider serviceProvider) { if (element.DataContext != null) { - _isInternalAction = true; - SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); - _isInternalAction = false; - return element.GetValue(targetProperty); + var binding = SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); + return binding.ProvideValue(serviceProvider); } SetTargetProperty(element, targetProperty); @@ -134,9 +120,9 @@ private void LangExtension_DataContextChanged(object sender, DependencyPropertyC } } - private void SetLangBinding(DependencyObject targetObject, DependencyProperty targetProperty, PropertyPath path, object dataContext) + private BindingBase SetLangBinding(DependencyObject targetObject, DependencyProperty targetProperty, PropertyPath path, object dataContext) { - if (targetProperty == null) return; + if (targetProperty == null) return null; BindingOperations.SetBinding(targetObject, targetProperty, new Binding { @@ -146,16 +132,20 @@ private void SetLangBinding(DependencyObject targetObject, DependencyProperty ta }); var key = targetObject.GetValue(targetProperty) as string; - if (string.IsNullOrEmpty(key)) return; + if (string.IsNullOrEmpty(key)) return null; - BindingOperations.SetBinding(targetObject, targetProperty, new Binding(key) - { - Converter = Converter, - ConverterParameter = ConverterParameter, - UpdateSourceTrigger = UpdateSourceTrigger.Explicit, - Source = Source, - Mode = BindingMode.OneWay - }); + var binding = CreateLangBinding(key); + BindingOperations.SetBinding(targetObject, targetProperty, binding); + return binding; } + + private BindingBase CreateLangBinding(string key) => new Binding(key) + { + Converter = Converter, + ConverterParameter = ConverterParameter, + UpdateSourceTrigger = UpdateSourceTrigger.Explicit, + Source = Source, + Mode = BindingMode.OneWay + }; } } \ No newline at end of file From 518afc884596da202114b90004a8ac18100e51d1 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 6 May 2020 23:40:34 +0800 Subject: [PATCH 02/94] fixed #379 --- .../HandyControl_Shared/Controls/SideMenu/SideMenu.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs index 5433e4a38..5d31e279f 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs @@ -170,6 +170,16 @@ private void OnExpandModeChanged(ExpandMode mode) } else if (sideMenuItem.IsSelected) { + switch (sideMenuItem.Role) + { + case SideMenuItemRole.Header: + _selectedHeader = sideMenuItem; + break; + case SideMenuItemRole.Item: + _selectedItem = sideMenuItem; + break; + } + ShowSelectedOne(sideMenuItem); sideMenuItemSelected = sideMenuItem; From ce94186801e6396ff9048a0097e6a5679ac723a9 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Thu, 7 May 2020 22:57:54 +0800 Subject: [PATCH 03/94] fixed #306 --- .../HandyControl_Net_40.csproj | 4 ++-- .../Controls/PaginationDemoCtl.xaml | 2 +- .../Controls/Other/Pagination.cs | 18 ++++++++++++++++++ .../Interactivity/Commands/ControlCommands.cs | 5 +++++ .../Properties/Langs/Lang.Designer.cs | 9 +++++++++ .../Properties/Langs/Lang.en.resx | 3 +++ .../Properties/Langs/Lang.fa.resx | 3 +++ .../Properties/Langs/Lang.fr.resx | 3 +++ .../Properties/Langs/Lang.ko-KR.resx | 3 +++ .../Properties/Langs/Lang.resx | 3 +++ .../Properties/Langs/Lang.ru.resx | 3 +++ .../Properties/Langs/Lang.tr.resx | 3 +++ .../Properties/Langs/LangProvider.cs | 11 +++++++++++ .../Themes/Styles/Pagination.xaml | 6 +++++- 14 files changed, 72 insertions(+), 4 deletions(-) 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 5d4fa598f..deeacd6e4 100644 --- a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj +++ b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj @@ -97,7 +97,7 @@ - + Properties\Langs\Lang.tr.resx @@ -208,4 +208,4 @@ - + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PaginationDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PaginationDemoCtl.xaml index 1a3eae9a0..2bf36b556 100644 --- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PaginationDemoCtl.xaml +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PaginationDemoCtl.xaml @@ -12,7 +12,7 @@ - + diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs b/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs index af9c24852..6241bb0ab 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs @@ -19,6 +19,7 @@ namespace HandyControl.Controls [TemplatePart(Name = ElementPanelMain, Type = typeof(Panel))] [TemplatePart(Name = ElementMoreRight, Type = typeof(FrameworkElement))] [TemplatePart(Name = ElementButtonLast, Type = typeof(RadioButton))] + [TemplatePart(Name = ElementButtonLast, Type = typeof(NumericUpDown))] public class Pagination : Control { #region Constants @@ -30,6 +31,7 @@ public class Pagination : Control private const string ElementPanelMain = "PART_PanelMain"; private const string ElementMoreRight = "PART_MoreRight"; private const string ElementButtonLast = "PART_ButtonLast"; + private const string ElementJump = "PART_Jump"; #endregion Constants @@ -42,6 +44,7 @@ public class Pagination : Control private Panel _panelMain; private FrameworkElement _moreRight; private RadioButton _buttonLast; + private NumericUpDown _jumpNumericUpDown; private bool _appliedTemplate; @@ -72,6 +75,7 @@ public Pagination() CommandBindings.Add(new CommandBinding(ControlCommands.Prev, ButtonPrev_OnClick)); CommandBindings.Add(new CommandBinding(ControlCommands.Next, ButtonNext_OnClick)); CommandBindings.Add(new CommandBinding(ControlCommands.Selected, ToggleButton_OnChecked)); + CommandBindings.Add(new CommandBinding(ControlCommands.Jump, (s, e) => PageIndex = (int) _jumpNumericUpDown.Value)); this.Show(MaxPageCount > 1); } @@ -219,6 +223,19 @@ public int MaxPageInterval #endregion MaxPageInterval + #region IsJumpEnabled + + public static readonly DependencyProperty IsJumpEnabledProperty = DependencyProperty.Register( + "IsJumpEnabled", typeof(bool), typeof(Pagination), new PropertyMetadata(ValueBoxes.FalseBox)); + + public bool IsJumpEnabled + { + get => (bool) GetValue(IsJumpEnabledProperty); + set => SetValue(IsJumpEnabledProperty, value); + } + + #endregion + #endregion #region Public Methods @@ -235,6 +252,7 @@ public override void OnApplyTemplate() _panelMain = GetTemplateChild(ElementPanelMain) as Panel; _moreRight = GetTemplateChild(ElementMoreRight) as FrameworkElement; _buttonLast = GetTemplateChild(ElementButtonLast) as RadioButton; + _jumpNumericUpDown = GetTemplateChild(ElementJump) as NumericUpDown; CheckNull(); diff --git a/src/Shared/HandyControl_Shared/Interactivity/Commands/ControlCommands.cs b/src/Shared/HandyControl_Shared/Interactivity/Commands/ControlCommands.cs index 770de7f29..6e31c2b25 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/Commands/ControlCommands.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/Commands/ControlCommands.cs @@ -107,6 +107,11 @@ public static class ControlCommands /// public static RoutedCommand Next { get; } = new RoutedCommand(nameof(Next), typeof(ControlCommands)); + /// + /// 跳转 + /// + public static RoutedCommand Jump { get; } = new RoutedCommand(nameof(Jump), typeof(ControlCommands)); + /// /// 上午 /// diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.Designer.cs b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.Designer.cs index 88845f2f6..dc4e560df 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.Designer.cs +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.Designer.cs @@ -249,6 +249,15 @@ public static string IsNecessary { } } + /// + /// 查找类似 跳转 的本地化字符串。 + /// + public static string Jump { + get { + return ResourceManager.GetString("Jump", resourceCulture); + } + } + /// /// 查找类似 查找类似 {0} 的本地化字符串。 的本地化字符串。 /// diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.en.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.en.resx index 2b7c279a4..59a34ce77 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.en.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.en.resx @@ -231,4 +231,7 @@ Looks up a localized string similar to "{0}". + + Jump + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fa.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fa.resx index afc57df75..91b64abf3 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fa.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fa.resx @@ -231,4 +231,7 @@ Looks up a localized string similar to "{0}". + + Jump + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fr.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fr.resx index df8fb2d0c..6b0b722db 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fr.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.fr.resx @@ -231,4 +231,7 @@ Looks up a localized string similar to "{0}". + + Jump + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ko-KR.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ko-KR.resx index 970cbc3f8..6a30690fb 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ko-KR.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ko-KR.resx @@ -231,4 +231,7 @@ Looks up a localized string similar to "{0}". + + Jump + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.resx index 471e5f02d..2fc0ff390 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.resx @@ -231,4 +231,7 @@ 查找类似 {0} 的本地化字符串。 + + 跳转 + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ru.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ru.resx index 6199c570b..68e6279bf 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ru.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.ru.resx @@ -231,4 +231,7 @@ Ищет локализованную строку, похожую на "{0}". + + Jump + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.tr.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.tr.resx index 6650e3400..0fd8b4456 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.tr.resx +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.tr.resx @@ -231,4 +231,7 @@ Looks up a localized string similar to "{0}". + + Jump + \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs b/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs index f21f6e824..9f52f0438 100644 --- a/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs +++ b/src/Shared/HandyControl_Shared/Properties/Langs/LangProvider.cs @@ -58,6 +58,7 @@ private void UpdateLangs() OnPropertyChanged(nameof(Interval30s)); OnPropertyChanged(nameof(Interval5m)); OnPropertyChanged(nameof(IsNecessary)); + OnPropertyChanged(nameof(Jump)); OnPropertyChanged(nameof(LangComment)); OnPropertyChanged(nameof(NextPage)); OnPropertyChanged(nameof(No)); @@ -182,6 +183,11 @@ private void UpdateLangs() /// public string IsNecessary => Lang.IsNecessary; + /// + /// 查找类似 跳转 的本地化字符串。 + /// + public string Jump => Lang.Jump; + /// /// 查找类似 查找类似 {0} 的本地化字符串。 的本地化字符串。 /// @@ -381,6 +387,11 @@ public class LangKeys /// public static string IsNecessary = nameof(IsNecessary); + /// + /// 查找类似 跳转 的本地化字符串。 + /// + public static string Jump = nameof(Jump); + /// /// 查找类似 查找类似 {0} 的本地化字符串。 的本地化字符串。 /// diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Pagination.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Pagination.xaml index 0534ab930..6d6de4d33 100644 --- a/src/Shared/HandyControl_Shared/Themes/Styles/Pagination.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Pagination.xaml @@ -2,7 +2,9 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:HandyControl.Controls" xmlns:interactivity="clr-namespace:HandyControl.Interactivity" - xmlns:system="clr-namespace:System;assembly=mscorlib"> + xmlns:system="clr-namespace:System;assembly=mscorlib" + xmlns:lang="clr-namespace:HandyControl.Properties.Langs" + xmlns:ex="clr-namespace:HandyControl.Tools.Extension"> @@ -95,6 +97,8 @@ - - + diff --git a/src/Shared/HandyControl_Shared/Properties/Langs/Lang.pt-BR.resx b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.pt-BR.resx new file mode 100644 index 000000000..9e82b831f --- /dev/null +++ b/src/Shared/HandyControl_Shared/Properties/Langs/Lang.pt-BR.resx @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirmar + + + Cancelar + + + Imagem PNG + + + Caminho de imagem errado + + + Tamanho de imagem errado + + + Tamanho desconhecido + + + Muito grande + + + Desconhecido + + + Intervalo de 30 segundos + + + Intervalo de 1 minuto + + + Intervalo de 5 minutos + + + Intervalo de 10 minutos + + + Intervalo de 30 minutos + + + Intervalo de 1 hora + + + Intervalo de 2 horas + + + Limpar + + + Fechar + + + Fechar tudo + + + Fechar outras + + + Manhã + + + Tarde + + + Perguntar + + + não pode estar vazio + + + fora do intervalo + + + erro de formato + + + Não é possível registrar o comando composto nele mesmo + + + Não é possível registrar o mesmo comando duas vezes + + + Sim + + + Não + + + Mais Zoom + + + Menos Zoom + + + Página anterior + + + Próxima página + + + Modo de página + + + Modo de duas páginas + + + Modo de rolagem + + + Econtrar + + + Procura uma sequência localizada semelhante a "{0}". + + + Pule + + + Geral + + \ No newline at end of file From b0f73e05e65a26aab18967f57dedc3b344447c29 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Fri, 26 Jun 2020 12:11:01 +0800 Subject: [PATCH 69/94] Update Lang.pt-BR.resx --- .../Properties/Langs/Lang.pt-BR.resx | 984 +++++++++--------- 1 file changed, 482 insertions(+), 502 deletions(-) diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx index c732de692..405807a24 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx @@ -1,96 +1,76 @@  + 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. + --> - - - - - - - - - - - - - - - - - - - + - @@ -109,651 +89,651 @@ 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 - - Controls - - - Styles + + Sobre - - Growl + + Adicionar um item - - It's a nice day today~~~ + + AnimationPath - - File saved successfully! + + O ícone da bandeja está aberto ira ocultar a janela em vez de fechar o programa - - Disk space is running out! + + Perguntar - - Connection failed. please check your network! + + Badge - - The program has crashed~~~ + + Preencha as informações básicas - - A new version has been detected!Do you want to update? + + Layout básico - - Loading + + Piscar - - ImageBrowser + + Blog - - ColorPicker + + Borda - - Carousel + + Pincel - - CompareSlider + + Botão - - TimeBar + + Botão Personalizado - - Expander + + ButtonGroup - - Pagination + + Calendar - - Click to open image browser + + CalendarWithClock - - ProgressBar + + Card - - AnimationPath + + Carousel - - Button + + Reiniciar para alterar o idioma? - - ToggleButton + + ChatBubble - - TabControl + + Sala de bate-papo CheckBox - - TextBlock + + CirclePanel - - Default + + Limpar - - Primary + + Clique para contar - - Success + + Clock - - Info + + ColorPicker - - Warning + + Compensação da coluna - - Danger + + Espaçamento de coluna - - Custom button + + ComboBox - - Title + + Em breve - - StepBar + + Comentário - - Prev + + Comum - - Next + + CompareSlider - - Register + + Concluído - - Fill in the basic information + + Este é o conteúdo - - Upload file + + Colaboradores - - Complete + + Controles - - Clock + + CoverFlow - - Calendar + + CoverView + + + Perigo + + + DataGrid DatePicker - - TimePicker - - - TextBox + + DateTimePicker - - This is the content + + Padrão - - This is the title + + Demonstração - - This item must be filled in + + Diálogo - - Please enter content + + Demonstração de diálogo - - The title is on the left + + Divisor - - Text + + Documentação - - Subtitle + + Documento em chinês - - PasswordBox + + Documento em inglês - - CirclePanel + + Arraste aqui - - ComboBox + + Drawer - - NumericUpDown + + Efeitos - - DataGrid + + Email - - Index + + Erro - - Name + + Sair - - Type + + Expander - - Remark + + Fatal - - Selected + + FlipClock - - ListBox + + FloatingBlock - - TreeView + + FlowDocument - - ScrollViewer + + FlowDocumentPageViewer - - Window + + FlowDocumentReader - - Menu + + FlowDocumentScrollViewer - - Right click here + + Quadro - - RadioButton + + GifImage - - open message window + + GotoTop - - open common window + + Gravatar - - open custom Non-client Area window + + Grid - - open mouse follow window + + GroupBox - - open custom content window + + Grupos - - Ignore + + Growl - - Error + + Uma nova versão foi detectada! Deseja atualizar? - - Ask + + Growl demonstração - - Fatal + + A conexão falhou. Verifique as configurações de rede! - - Clear + + O programa travou~~~ - - Whether to restart to change the language? + + Está um ótimo dia hoje~~~ - - About + + Arquivo salvo com sucesso! - - Repository + + O espaço em disco está acabando! - - Email + + HatchBrushGenerator - - Chatroom + + HoneycombPanel - - Blog + + Layout híbrido - - Brush + + Ignorar - - PreviewSlider + + ImageBlock - - Contributors + + ImageBrowser - - Slider + + ImageSelector - - It's not a phone number + + Índice - - please enter email + + Informações - - Step + + Diálogo interativo - - CalendarWithClock + + Não é um número de telefone - - DateTimePicker + + Label - - GroupBox + + Pesquisa uma cadeia de caracteres localizada semelhante a "{0}". + + + ListBox ListView - - RichTextBox - - - ToolBar - - - Common + + Carregando - - ShowRowNumber + + Magnifier - - SearchBar + + Menu - - Tag + + MessageBox - - GifImage + + Animação Transformação - - OutlineText + + Nome - - QQ Group + + Nova janela - - FlipClock + + Avançar - - open blur window + + Notificação - - Rate + + NotifyIcon - - Shield + + NumericUpDown - - WaterfallPanel + + Desligado - - Groups + + Ok - - CoverView + + Ligado - - CoverFlow + + abrir janela borrada - - Please input a keyword + + abrir janela comum - - open no Non-client Area dragable window + + abrir janela de conteúdo personalizado - - Drag here + + abrir janela de mensagem personalizada - - MessageBox + + abrir janela "Non-client Area" personalizada - - ProgressButton + + Abrir janela com brilho - - Upload;Uploading + + Clique para abrir o navegador de imagens - - open custom message window + + abrir janela de mensagem - - Transfer + + abra o mouse siga a janela - - ChatBubble + + Abra a janela comum nativa - - Push to talk + + Abra a janela de navegação - - Sec + + abrir janela arrastavél não "Non-client Area" - - Label + + Abrir Painel - - GotoTop + + Abrir sprite - - NotifyIcon + + OutlineText - - Badge + + Paginação - - Gravatar + + PasswordBox - - Coming Soon + + PinBox - - Comment + + Por favor insira... - - Reply + + Aguarde... - - Dialog + + Por favor, insira o texto - - TextDialog + + Por favor, informe o e-mail - - Please wait... + + Por favor, insira uma palavra-chave - - Growl demo + + Poptip - - New window + + início superior; topo; extremidade superior; início direito; direita; extremidade direita; extremidade inferior; inferior; início inferior; extremidade esquerda; esquerda; partida esquerda - - Visibility + + Demonstrações práticas - - Blink + + Anterior - - Exit + + PreviewSlider - - Open Panel + + Primário - - The tray icon is open and will hide the window instead of closing the program + + ProgressBar - - Prompt + + ProgressButton - - Try to close app? + + Projeto - - Interactive Dialog + + PropertyGrid - - Ok + + Aperte para falar - - Please input... + + Grupo QQ - - Click to count + + RadioButton - - RepeatButton + + RangeSlider - - Dialog demo + + Rate - - Show in the current window + + Recomendação - - Show in the main window + + Registrar - - SideMenu + + RelativePanel - - Grid + + Comentário - - Basic layout + + Remover um item - - Column spacing + + RepeatButton - - Hybrid layout + + Responder - - Column offset + + Repositório - Responsive layout - - - Border + Layout responsivo - - Poptip + + RichTextBox - - Recommendation + + Clique com o botão direito aqui - - Project + + RunningBlock - - RangeSlider + + Screenshot - - RelativePanel + + ScrollViewer - - On + + SearchBar - - Off + + Segs - - ButtonGroup + + Selecionado - - Card + + Enviar notificação - - TextDialog with timer + + Shield - - Magnifier + + Mostrar na janela atual - - ImageBlock + + Mostrar na janela principal - - RunningBlock + + ShowRowNumber - - HoneycombPanel + + SideMenu - - Add an item + + Slider - - Remove an item + + SplitButton Sprite - - Open sprite + + Iniciar captura de tela - - Notification + + Permanecer aberto - - Send notification + + Step - - Stays open + + StepBar - - FloatingBlock + + Estilos - - SplitButton + + Legenda - - Tools + + Sucesso - - HatchBrushGenerator + + TabControl - - Morphing Animation + + Tag - - Divider + + Texto - - top-start;top;top-end;right-start;right;right-end;bottom-end;bottom;bottom-start;left-end;left;left-start + + TextBlock - - TransitioningContentControl + + TextBox - - Drawer + + TextDialog - - Documentation + + TextDialog (no controle) - - Effects + + TextDialog com temporizador - - Website + + TimeBar - - Vsix + + TimePicker - - English document + + Perguntar - - Chinese document + + Título - - Demo + + Este é o título - - PinBox + + Este item deve ser preenchido - - FlowDocumentScrollViewer + + O título está à esquerda - - Open glowWindow + + ToggleButton - - FlowDocument + + ToolBar - - FlowDocumentPageViewer + + Ferramentas - - FlowDocumentReader + + Transferir - - Open native common window + + TransitioningContentControl - - Open navigation window + + TreeView - - Frame + + Tentar fehcar o aplicativo? - - Practical demos + + Tipo - - Start screenshot + + Enviar arquivo - - Screenshot + + Enviar;Enviando - - TextDialog(In control) + + Visibilidade - - Looks up a localized string similar to "{0}". + + Vsix - - PropertyGrid + + Aviso - - ImageSelector + + WaterfallPanel + + + Site + + + Janela \ No newline at end of file From 6bcddcb669567ac100febe8ef43899f1d84ea738 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Fri, 26 Jun 2020 16:30:59 +0800 Subject: [PATCH 70/94] Create README-cn.md --- README-cn.md | 494 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 494 insertions(+) create mode 100644 README-cn.md diff --git a/README-cn.md b/README-cn.md new file mode 100644 index 000000000..f857f2ebf --- /dev/null +++ b/README-cn.md @@ -0,0 +1,494 @@ +[中文](https://gitee.com/handyorg/HandyControl/blob/master/README-cn.md) - [English](https://github.com/HandyOrg/HandyControl/blob/master/README.md) + +![logo](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/icon.png) + +![dotnet-version](https://img.shields.io/badge/.net-%3E%3D4.0-blue.svg) ![csharp-version](https://img.shields.io/badge/C%23-8.0-blue.svg) ![IDE-version](https://img.shields.io/badge/IDE-vs2019-blue.svg) [![nuget-version](https://img.shields.io/nuget/v/HandyControl.svg)](https://www.nuget.org/packages/HandyControl) ![Github-build-status](https://github.com/HandyOrg/HandyControl/workflows/build/badge.svg) [![Join the chat at https://gitter.im/HandyControl/Lobby](https://badges.gitter.im/HandyControl/Lobby.svg)](https://gitter.im/HandyControl/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![wiki](https://img.shields.io/badge/wiki-Complete-brightgreen.svg)](https://github.com/ghost1372/HandyControl/wiki) [![Nuget](https://img.shields.io/nuget/dt/handycontrol)](https://www.nuget.org/packages/HandyControl) + +# Welcome to HandyControl + +## 面向中国 + +### 加入讨论 + +| | 西江月群 | 定风波群 | 广寒秋群 | +|-|:-:|:-:|:-:| +| 群号码 | [![qq-group](https://img.shields.io/badge/qq-714704041-red.svg)](//shang.qq.com/wpa/qunwpa?idkey=a571e5553c9d41e49c4f22f3a8b2865451497a795ff281fedf3285def247efc1) | [![qq-group](https://img.shields.io/badge/qq-858784803-red.svg)](//shang.qq.com/wpa/qunwpa?idkey=5c18622a0f6ee07a6f33afa8cdb85b1f72ea50e878271dfcec919c76b55afee7) | 微信群 | +| 二维码 | ![qq-group](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/qq_group_1.png) | ![qq-group](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/qq_group_2.png) | ![wechat-group](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/wechat_group.png) | + +### 码云 + +[https://gitee.com/handyorg/HandyControl/](https://gitee.com/handyorg/HandyControl/) + +### 中文文档 + +[https://handyorg.github.io/handycontrol/](https://handyorg.github.io/handycontrol/) + +### 赞助 +如果您觉得HandyControl还不错,并且刚好有些闲钱,那么可以选择以下两种方式来赞助(记得入群联系我们呀~~): + +* [以HandyControl的名义为慈善事业做贡献](http://www.chinacharityfederation.org/ConfirmDonation/0.html?zhijie=3) + +* 为我们购买防脱洗发水 +![qrcode](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/qrcode.png) + +## Contributors + +ghost1372 +DingpingZhang +M0n7y5 +guanguanchuangyu +yanchao891012 +noctwolf +xianyun666 +afunc233 +DinoChan +MrZhangYuan +JinhuaChen-OMEC +seedtyx +KleinPan +yxhq +AiHaibara +walterlv +Luoyingliang +lindexi + +## Backers + + + + + + + + + + + + + + + + + + +## Special thanks to + +[![Visual Studio Community 2019](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/vs2019_logo.png)](https://visualstudio.microsoft.com/free-developer-offers/) +[![JetBrains](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/resharper_logo.png)](https://www.jetbrains.com/?from=HandyControl) +[![Cake](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/cake_logo.png)](https://cakebuild.net/) +[![AppVeyor](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/appveyor_logo.png)](https://www.appveyor.com/) +[![Gitter](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/gitter_logo.png)](https://gitter.im/) + +## Usage + +Step 1: Add a reference to HandyControl or search for HandyControl on the nuget; + +```Install-Package HandyControl``` + +Step 2: Add code in App.xaml as follows: +```XML + + + + + + + + +``` + +Step 3: Add NameSpace: +`xmlns:hc="https://handyorg.github.io/handycontrol"` + +Step 4: Enjoy coding + +## VSIX packages for Visual Studio + +| [VS2019](https://marketplace.visualstudio.com/items?itemName=HandyOrg.handycontrolforvs2019) | +| ------------- | + +## Stargazers over time + +[![Stargazers over time](https://starchart.cc/HandyOrg/HandyControl.svg)](https://starchart.cc/HandyOrg/HandyControl) + +## Overview + +![Overview](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Overview.png) + +![Overview-dark](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Overview-dark.png) + +## Latest examples + +### ImageSelector + +![ImageSelector](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ImageSelector.png) + +### PropertyGrid + +![PropertyGrid](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/PropertyGrid.png) + +### Screenshot + +![Screenshot](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Screenshot.png) + +### GooeyEffect + +![GooeyEffect](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GooeyEffect.gif) + +### GlowWindow + +![GlowWindow](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GlowWindow.png) + +## History publication + +### FlowDocumentScrollViewerStyle + +![FlowDocumentScrollViewerStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/FlowDocumentScrollViewer.png) + +### PinBox + +![PinBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/PinBox.png) + +### Effects + +![Effects](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Effects.png) + +### RelativePanel + +![RelativePanel](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/RelativePanel.png) + +### Drawer + +![Drawer](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Drawer.gif) + +### Poptip + +![Poptip](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Poptip.gif) + +### Divider + +![Divider](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Divider.png) + +### GeometryAnimation + +![GeometryAnimation](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GeometryAnimation.gif) + +### SplitButton + +![SplitButton](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/SplitButton.png) + +### FloatingBlock + +![FloatingBlock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/FloatingBlock.gif) + +### HoneycombPanel + +![HoneycombPanel](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/HoneycombPanel.png) + +### RunningBlock + +![RunningBlock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/RunningBlock.gif) + +### ImageBlock + +![ImageBlock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ImageBlock.gif) + +![ImageBlock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ImageBlock.png) + +### Magnifier + +![Magnifier](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Magnifier.png) + +### Card + +![Card](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Card.png) + +### ButtonGroup + +![ButtonGroup](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ButtonGroup.png) + +### Grid + +![Grid](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Grid.gif) + +### SideMenu + +![SideMenu](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/SideMenu.png) + +### NotifyIcon + +![NotifyIcon](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/NotifyIcon.png) + +### Dialog + +![Dialog](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Dialog.png) + +### WaveProgressBar + +![WaveProgressBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/WaveProgressBar.gif) + +### Badge + +![Badge](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Badge.png) + +### Gravatar + +![Gravatar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Gravatar.gif) + +### GoToTop + +![GoToTop](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GoToTop.gif) + +### ChatBubble + +![ChatBubble](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ChatBubble.png) + +### Label + +![Label](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Label.png) + +### Transfer + +![Transfer](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Transfer.png) + +### ProgressButton + +![ProgressButton](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ProgressButton.png) + +### CoverFlow + +![CoverFlow](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CoverFlow.gif) + +### CoverView + +![CoverView](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CoverView.gif) + +### MessageBox + +![MessageBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/MessageBox.png) + +### WaterfallPanel + +![WaterfallPanel](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/WaterfallPanel.png) + +### Rate + +![Rate](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Rate.png) + +### BlurWindow + +![BlurWindow](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/BlurWindow.png) + +### FlipClock + +![FlipClock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/FlipClock.gif) + +### Shield + +![Shield](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Shield.png) + +### OutlineText + +![OutlineText](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/OutlineText.png) + +### Tag + +![Tag](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Tag.png) + +### ToolBar + +![ToolBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ToolBar.png) + +### Slider + +![Slider](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Slider.png) + +### CircleProgressBar + +![CircleProgressBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CircleProgressBar.png) + +### ButtonStyle + +![ButtonStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Button.png) + +### ToggleButtonStyle + +![ToggleButtonStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ToggleButton.png) + +### RadioButtonStyle + +![RadioButtonStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/RadioButton.png) + +### CheckBoxStyle + +![CheckBoxStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CheckBox.png) + +### ListBoxStyle + +![ListBoxStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ListBox.png) + +### TreeViewStyle + +![TreeViewStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TreeView.png) + +### ListViewStyle + +![ListViewStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ListView.png) + +### DataGrid + +![DataGrid](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/DataGrid.png) + +### Now you can switch to dark theme + +![dark theme](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/DarkTheme.png) + +### ColorPicker + +![ColorPicker](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ColorPicker.gif) + +### Loading + +![Loading](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Loading.gif) + +### Carousel + +![Carousel](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Carousel.gif) + +### Pagination + +![Pagination](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Pagination.gif) + +### Expander + +![Expander](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Expander.gif) + +### TimeBar + +![TimeBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TimeBar.gif) + +### ImageBrowser + +![ImageBrowser](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ImageBrowser.gif) + +### PreviewSlider + +![PreviewSlider](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/PreviewSlider.gif) + +### CompareSlider + +![CompareSlider](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CompareSlider-h.gif) + +![CompareSlider](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CompareSlider-v.gif) + +### Growl + +![Growl](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Growl.gif) + +### AnimationPath + +![AnimationPath](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/AnimationPath.gif) + +### ProgressBar + +![ProgressBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ProgressBar.gif) + +### TabControl + +![TabControl](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TabControl.gif) + +### TabControlStyle + +![TabControlStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TabControl.png) + +### GroupBox + +![GroupBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GroupBox.png) + +### StepBar + +![StepBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/StepBar.png) + +### GifImage + +![GifImage](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GifImage.gif) + +### ContextMenu + +![ContextMenu](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ContextMenu.png) + +### Calendar + +![Calendar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Calendar.jpg) + +### Clock + +![Clock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Clock.jpg) + +### CalendarWithClock + +![CalendarWithClock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CalendarWithClock.png) + +### TextBlock + +![TextBlock](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TextBlock.jpg) + +### RichTextBoxStyle + +![RichTextBoxStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/RichTextBox.png) + +### TextBox + +![TextBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TextBox.jpg) + +### ComboBox + +![ComboBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ComboBox.jpg) + +### NumericUpDown + +![NumericUpDown](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/NumericUpDown.png) + +### SearchBar + +![SearchBar](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/SearchBar.png) + +### PasswordBox + +![PasswordBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/PasswordBox.jpg) + +### DataPicker + +![DataPicker](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/DataPicker.jpg) + +### TimePicker + +![TimePicker](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TimePicker.jpg) + +### DateTimePicker + +![DateTimePicker](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/DateTimePicker.png) + +### ScrollViewer + +![ScrollViewer](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/ScrollViewer.png) + +### CirclePanel + +![CirclePanel](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CirclePanel.jpg) + +### TransitioningContentControl + +![TransitioningContentControl](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/TransitioningContentControl.gif) + +### BorderStyle + +![BorderStyle](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Border.png) + +### Brush + +![Brush](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Brush.png) + +## Switching configuration + +![Switching configuration](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/SwitchConfig.png) From 4bdaa5676e5e85d615a07e112f32d250637b8632 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Fri, 26 Jun 2020 16:31:06 +0800 Subject: [PATCH 71/94] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9364aa90c..8625625fe 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[中文](https://github.com/HandyOrg/HandyControl/blob/master/README-cn.md) - [English](https://github.com/HandyOrg/HandyControl/blob/master/README.md) + ![logo](https://raw.githubusercontent.com/HandyOrg/HandyOrgResource/master/HandyControl/Resources/icon.png) ![dotnet-version](https://img.shields.io/badge/.net-%3E%3D4.0-blue.svg) ![csharp-version](https://img.shields.io/badge/C%23-8.0-blue.svg) ![IDE-version](https://img.shields.io/badge/IDE-vs2019-blue.svg) [![nuget-version](https://img.shields.io/nuget/v/HandyControl.svg)](https://www.nuget.org/packages/HandyControl) ![Github-build-status](https://github.com/HandyOrg/HandyControl/workflows/build/badge.svg) [![Join the chat at https://gitter.im/HandyControl/Lobby](https://badges.gitter.im/HandyControl/Lobby.svg)](https://gitter.im/HandyControl/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![wiki](https://img.shields.io/badge/wiki-Complete-brightgreen.svg)](https://github.com/ghost1372/HandyControl/wiki) [![Nuget](https://img.shields.io/nuget/dt/handycontrol)](https://www.nuget.org/packages/HandyControl) From 2d9b6bb8ade187df3fd955cfea327c1357ed59c8 Mon Sep 17 00:00:00 2001 From: Mahdi Hosseini Date: Sat, 27 Jun 2020 15:29:14 +0430 Subject: [PATCH 72/94] add #400 --- .../HandyControlDemo_Net_40.csproj | 3 + .../HandyControlDemo_Net_GE45.csproj | 3 + .../Data/DemoInfo.json | 3 +- .../HandyControlDemo_Shared.projitems | 7 + .../Properties/Langs/Lang.Designer.cs | 10 +- .../Properties/Langs/Lang.en.resx | 3 + .../Properties/Langs/Lang.fa.resx | 3 + .../Properties/Langs/Lang.fr.resx | 3 + .../Properties/Langs/Lang.ko-KR.resx | 3 + .../Properties/Langs/Lang.pt-BR.resx | 143 ++++++++++-------- .../Properties/Langs/Lang.resx | 3 + .../Properties/Langs/Lang.ru.resx | 3 + .../Properties/Langs/Lang.tr.resx | 3 + .../Properties/Langs/LangProvider.cs | 6 +- .../Img/LeftMainContent/Geometry_16x.png | Bin 0 -> 470 bytes .../UserControl/Styles/GeometryDemoCtl.xaml | 11 ++ .../Styles/GeometryDemoCtl.xaml.cs | 34 +++++ 17 files changed, 178 insertions(+), 63 deletions(-) create mode 100644 src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Geometry_16x.png create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj index c17c05bc9..5ce52f21e 100644 --- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj +++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj @@ -412,6 +412,9 @@ Resources\Img\LeftMainContent\MainMenuControl_16x.png + + Resources\Img\LeftMainContent\Geometry_16x.png + Resources\fabric-icons.ttf diff --git a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj index 0a009190d..b3896d28d 100644 --- a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj +++ b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj @@ -411,6 +411,9 @@ Resources\Img\LeftMainContent\MainMenuControl_16x.png + + + Resources\Img\LeftMainContent\Geometry_16x.png Resources\fabric-icons.ttf diff --git a/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json b/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json index 3f16bf4ac..613c2d5a0 100644 --- a/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json +++ b/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json @@ -32,7 +32,8 @@ [ "Border", "BorderDemoCtl", "BorderElement_16x", "" ], [ "Label", "LabelDemoCtl", "Label_16x", "" ], [ "Frame", "FrameDemoCtl", "frame_16xLG", "1" ], - [ "Window", "NativeWindowDemoCtl", "WindowsForm_16x", "1" ] + [ "Window", "NativeWindowDemoCtl", "WindowsForm_16x", "1" ], + [ "Geometry", "GeometryDemoCtl", "Geometry_16x", "1" ] ] }, { diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems index 0e17de7fc..f32f6c4b7 100644 --- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems +++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems @@ -315,6 +315,9 @@ FrameDemoCtl.xaml + + + GeometryDemoCtl.xaml GroupBoxDemoCtl.xaml @@ -862,6 +865,10 @@ Designer MSBuild:Compile + + + Designer + MSBuild:Compile Designer diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs index 41e738c99..7f1a0b463 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs @@ -671,7 +671,15 @@ public static string Frame { return ResourceManager.GetString("Frame", resourceCulture); } } - + + public static string Geometry + { + get + { + return ResourceManager.GetString("Geometry", resourceCulture); + } + } + /// /// 查找类似 Gif图片 的本地化字符串。 /// diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx index c732de692..090e5b577 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx @@ -756,4 +756,7 @@ ImageSelector + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx index 55d816c1f..2edb26765 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx @@ -756,4 +756,7 @@ ImageSelector + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx index c8d40632c..57a16fd2e 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx @@ -756,4 +756,7 @@ ImageSelector + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx index 145d21349..065145dc5 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx @@ -756,4 +756,7 @@ ImageSelector + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx index 405807a24..ac7835dcb 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx @@ -1,76 +1,96 @@  + 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. + --> + + + + + + + + + + + + + + + + + + - + + @@ -89,13 +109,13 @@ text/microsoft-resx - 1.3 + 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, 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 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Sobre @@ -736,4 +756,7 @@ Janela + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx index 1035e1121..fc08c26ab 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx @@ -756,4 +756,7 @@ 图片选择器 + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx index c732de692..090e5b577 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx @@ -756,4 +756,7 @@ ImageSelector + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx index 988e40aa2..b641cf039 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx @@ -756,4 +756,7 @@ ImageSelector + + Geometry + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs index 9a7df866a..41dba43cc 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs @@ -105,6 +105,7 @@ private void UpdateLangs() OnPropertyChanged(nameof(FlowDocumentReader)); OnPropertyChanged(nameof(FlowDocumentScrollViewer)); OnPropertyChanged(nameof(Frame)); + OnPropertyChanged(nameof(Geometry)); OnPropertyChanged(nameof(GifImage)); OnPropertyChanged(nameof(GotoTop)); OnPropertyChanged(nameof(Gravatar)); @@ -592,10 +593,11 @@ private void UpdateLangs() /// public string Frame => Lang.Frame; + public string Geometry => Lang.Geometry; /// /// 查找类似 Gif图片 的本地化字符串。 /// - public string GifImage => Lang.GifImage; + public string GifImage => Lang.GifImage; /// /// 查找类似 回到顶部 的本地化字符串。 @@ -1666,6 +1668,8 @@ public class LangKeys /// public static string Frame = nameof(Frame); + public static string Geometry = nameof(Geometry); + /// /// 查找类似 Gif图片 的本地化字符串。 /// diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Geometry_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Geometry_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..4075b3dc4cdb21c837e16a81a642b11cd37770ce GIT binary patch literal 470 zcmV;{0V)28P)9j7TypdAgD%_3NRiIohA2T$7hrma~j%IYKT9%ceJ|ToyBTnJNu~=-h zR4QF*KTg{VQmNEBoVe$Cvk2US$8=qvtJmv^WHPA)DScau00a}_2JPu$vG`)!_B;61 zb=@F7gW#s(Q1i_f;O0dkM2^lO(IqzQi9G5!PKCII=M=Zm>}vpS4uS&^mcSYIp!V}X zK1h9^{EQgD`*F2gf~NT|C=?1=$O(o+eDh?rT8*-YJ@PmF5w;ShacQ4`>~yQEgFR+~2r;|_sma+_Bk5L>LHfMT$y zEH4=ck09VMybNx$mQQHzhQr|%20!phBobL|?)8k-kEFckfxi$x0lNT?b9L2oy8r+H M07*qoM6N<$f?;ITrT_o{ literal 0 HcmV?d00001 diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml new file mode 100644 index 000000000..88cf83195 --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml @@ -0,0 +1,11 @@ + + + + + diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs new file mode 100644 index 000000000..d2af7c221 --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs @@ -0,0 +1,34 @@ + +using HandyControl.Data; +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using System.Windows.Shapes; + +namespace HandyControlDemo.UserControl +{ + public partial class GeometryDemoCtl + { + public GeometryDemoCtl() + { + InitializeComponent(); + GenerateGeometries(); + } + + public void GenerateGeometries() + { + ResourceDictionary dictionary = new ResourceDictionary(); + dictionary.Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Basic/Geometries.xaml", UriKind.Absolute); + foreach (var item in dictionary.Keys) + { + StackPanel stack = new StackPanel { Margin = new Thickness(10) }; + TextBlock text = new TextBlock { Text = item.ToString(), HorizontalAlignment = HorizontalAlignment.Stretch }; + Path path = new Path { Width = 26, Height = 26, Data = TryFindResource(item.ToString()) as Geometry, Fill = TryFindResource(ResourceToken.PrimaryTextBrush) as Brush }; + stack.Children.Add(path); + stack.Children.Add(text); + panel.Children.Add(stack); + } + } + } +} From 31622677956d8a98c77ea8f5d3e7f8c87a7f85d5 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 28 Jun 2020 22:39:27 +0800 Subject: [PATCH 73/94] optimized performance --- .../Controls/Base/SelectableItem.cs | 6 +- .../Controls/Base/SimpleItemsControl.cs | 2 +- .../Controls/Block/RunningBlock.cs | 8 +- .../Controls/Button/SplitButton.cs | 2 +- .../Controls/Carousel/Carousel.cs | 4 +- .../Controls/Cover/CoverFlow/CoverFlow.cs | 2 +- .../Controls/Cover/CoverView/CoverView.cs | 2 +- .../Controls/Dialog/Dialog.cs | 2 +- .../Controls/Growl/Growl.cs | 2 +- .../Controls/Image/ImageBlock.cs | 2 +- .../Controls/Image/ImageViewer.cs | 10 +- .../Controls/Input/ComboBox.cs | 6 +- .../Controls/Input/DatePicker.cs | 4 +- .../Controls/Input/DateTimePicker.cs | 6 +- .../Controls/Input/ImageSelector.cs | 2 +- .../Controls/Input/NumericUpDown.cs | 8 +- .../Controls/Input/PasswordBox.cs | 94 +++++++++---------- .../Controls/Input/SearchBar.cs | 2 +- .../Controls/Input/TextBox.cs | 4 +- .../Controls/Input/TimePicker.cs | 6 +- .../Controls/Loading/LoadingBase.cs | 2 +- .../Controls/Loading/LoadingCircle.cs | 3 +- .../Controls/Other/AnimationPath.cs | 2 +- .../Controls/Other/Badge.cs | 2 +- .../Controls/Other/ChatBubble.cs | 2 +- .../Controls/Other/Drawer.cs | 6 +- .../Controls/Other/GotoTop.cs | 4 +- .../Controls/Other/NotifyIcon.cs | 2 +- .../Controls/Other/Pagination.cs | 2 +- .../Controls/Other/Poptip.cs | 2 +- .../Controls/Other/ScrollViewer.cs | 6 +- .../Controls/Other/Watermark.cs | 2 +- .../Controls/Panel/CirclePanel.cs | 2 +- .../Controls/Panel/Grid/Col.cs | 2 +- .../Controls/ProgressBar/CircleProgressBar.cs | 2 +- .../Controls/ProgressBar/WaveProgressBar.cs | 2 +- .../HorizontalAlignmentPropertyEditor.cs | 3 +- .../VerticalAlignmentPropertyEditor.cs | 3 +- .../Controls/PropertyGrid/PropertyItem.cs | 6 +- .../HandyControl_Shared/Controls/Rate/Rate.cs | 8 +- .../Controls/Rate/RateItem.cs | 8 +- .../Controls/Screenshot/ScreenshotWindow.cs | 4 +- .../Controls/SideMenu/SideMenu.cs | 2 +- .../Controls/SideMenu/SideMenuItem.cs | 2 +- .../Slider/RangeSlider/RangeSlider.cs | 6 +- .../Controls/Slider/RangeSlider/RangeTrack.cs | 2 +- .../Controls/TabControl/TabControl.cs | 12 +-- .../Controls/TabControl/TabItem.cs | 2 +- .../Controls/TabControl/TabPanel.cs | 2 +- .../HandyControl_Shared/Controls/Tag/Tag.cs | 6 +- .../Controls/Tag/TagPanel.cs | 2 +- .../Controls/Time/CalendarWithClock.cs | 2 +- .../Controls/Time/Clock/ClockBase.cs | 2 +- .../Controls/Time/TimeBar/TimeBar.cs | 2 +- .../Controls/Transfer/TransferItem.cs | 4 +- .../Controls/Window/MessageBox.cs | 2 +- .../Controls/Window/PopupWindow.cs | 6 +- .../Controls/Window/Window.cs | 6 +- .../Behavior/FluidMoveBehavior.cs | 4 +- .../Behavior/FluidMoveBehaviorBase.cs | 2 +- .../Behavior/MouseDragElementBehavior.cs | 5 +- .../Behavior/MouseDragElementBehaviorEx.cs | 2 +- .../Interactivity/EventToCommand.cs | 4 +- .../ExtendedVisualStateManager.cs | 4 +- .../Interactivity/TriggerAction.cs | 6 +- 65 files changed, 168 insertions(+), 168 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/Base/SelectableItem.cs b/src/Shared/HandyControl_Shared/Controls/Base/SelectableItem.cs index a458f0abe..accaf979c 100644 --- a/src/Shared/HandyControl_Shared/Controls/Base/SelectableItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/Base/SelectableItem.cs @@ -67,7 +67,7 @@ protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) public bool IsSelected { get => (bool)GetValue(IsSelectedProperty); - set => SetValue(IsSelectedProperty, value); + set => SetValue(IsSelectedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty SelfManageProperty = DependencyProperty.Register( @@ -76,7 +76,7 @@ public bool IsSelected public bool SelfManage { get => (bool) GetValue(SelfManageProperty); - set => SetValue(SelfManageProperty, value); + set => SetValue(SelfManageProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty CanDeselectProperty = DependencyProperty.Register( @@ -85,7 +85,7 @@ public bool SelfManage public bool CanDeselect { get => (bool) GetValue(CanDeselectProperty); - set => SetValue(CanDeselectProperty, value); + set => SetValue(CanDeselectProperty, ValueBoxes.BooleanBox(value)); } public static readonly RoutedEvent SelectedEvent = diff --git a/src/Shared/HandyControl_Shared/Controls/Base/SimpleItemsControl.cs b/src/Shared/HandyControl_Shared/Controls/Base/SimpleItemsControl.cs index b347b2449..20e2df519 100644 --- a/src/Shared/HandyControl_Shared/Controls/Base/SimpleItemsControl.cs +++ b/src/Shared/HandyControl_Shared/Controls/Base/SimpleItemsControl.cs @@ -38,7 +38,7 @@ public SimpleItemsControl() { if (e.NewItems != null && e.NewItems.Count > 0) { - SetValue(HasItemsPropertyKey, true); + SetValue(HasItemsPropertyKey, ValueBoxes.TrueBox); } OnItemsChanged(s, e); }; diff --git a/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs b/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs index dbdfe1611..eb5e29023 100644 --- a/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs +++ b/src/Shared/HandyControl_Shared/Controls/Block/RunningBlock.cs @@ -36,7 +36,7 @@ public override void OnApplyTemplate() public bool Runaway { get => (bool) GetValue(RunawayProperty); - set => SetValue(RunawayProperty, value); + set => SetValue(RunawayProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty AutoRunProperty = DependencyProperty.Register( @@ -45,7 +45,7 @@ public bool Runaway public bool AutoRun { get => (bool) GetValue(AutoRunProperty); - set => SetValue(AutoRunProperty, value); + set => SetValue(AutoRunProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty OrientationProperty = DependencyProperty.Register( @@ -93,7 +93,7 @@ public double Speed public bool IsRunning { get => (bool) GetValue(IsRunningProperty); - set => SetValue(IsRunningProperty, value); + set => SetValue(IsRunningProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty AutoReverseProperty = DependencyProperty.Register( @@ -102,7 +102,7 @@ public bool IsRunning public bool AutoReverse { get => (bool) GetValue(AutoReverseProperty); - set => SetValue(AutoReverseProperty, value); + set => SetValue(AutoReverseProperty, ValueBoxes.BooleanBox(value)); } private void UpdateContent() diff --git a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs index f5e3767ce..36330a305 100644 --- a/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs +++ b/src/Shared/HandyControl_Shared/Controls/Button/SplitButton.cs @@ -33,7 +33,7 @@ public double MaxDropDownHeight public bool IsDropDownOpen { get => (bool) GetValue(IsDropDownOpenProperty); - set => SetValue(IsDropDownOpenProperty, value); + set => SetValue(IsDropDownOpenProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty DropDownContentProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Carousel/Carousel.cs b/src/Shared/HandyControl_Shared/Controls/Carousel/Carousel.cs index 3528fe564..9d1362283 100644 --- a/src/Shared/HandyControl_Shared/Controls/Carousel/Carousel.cs +++ b/src/Shared/HandyControl_Shared/Controls/Carousel/Carousel.cs @@ -104,7 +104,7 @@ public double ExtendWidth public bool IsCenter { get => (bool)GetValue(IsCenterProperty); - set => SetValue(IsCenterProperty, value); + set => SetValue(IsCenterProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty PageButtonStyleProperty = DependencyProperty.Register( @@ -161,7 +161,7 @@ private void Carousel_IsVisibleChanged(object sender, DependencyPropertyChangedE public bool AutoRun { get => (bool)GetValue(AutoRunProperty); - set => SetValue(AutoRunProperty, value); + set => SetValue(AutoRunProperty, ValueBoxes.BooleanBox(value)); } /// diff --git a/src/Shared/HandyControl_Shared/Controls/Cover/CoverFlow/CoverFlow.cs b/src/Shared/HandyControl_Shared/Controls/Cover/CoverFlow/CoverFlow.cs index 717f07311..eb9d98f66 100644 --- a/src/Shared/HandyControl_Shared/Controls/Cover/CoverFlow/CoverFlow.cs +++ b/src/Shared/HandyControl_Shared/Controls/Cover/CoverFlow/CoverFlow.cs @@ -123,7 +123,7 @@ public int PageIndex public bool Loop { get => (bool)GetValue(LoopProperty); - set => SetValue(LoopProperty, value); + set => SetValue(LoopProperty, ValueBoxes.BooleanBox(value)); } public override void OnApplyTemplate() diff --git a/src/Shared/HandyControl_Shared/Controls/Cover/CoverView/CoverView.cs b/src/Shared/HandyControl_Shared/Controls/Cover/CoverView/CoverView.cs index 714fcc59d..7ce10f513 100644 --- a/src/Shared/HandyControl_Shared/Controls/Cover/CoverView/CoverView.cs +++ b/src/Shared/HandyControl_Shared/Controls/Cover/CoverView/CoverView.cs @@ -146,7 +146,7 @@ public double ItemContentHeight public bool ItemContentHeightFixed { get => (bool)GetValue(ItemContentHeightFixedProperty); - set => SetValue(ItemContentHeightFixedProperty, value); + set => SetValue(ItemContentHeightFixedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ItemHeaderTemplateProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs b/src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs index 0161ea094..dc3e91196 100644 --- a/src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs +++ b/src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs @@ -24,7 +24,7 @@ public class Dialog : ContentControl public bool IsClosed { get => (bool)GetValue(IsClosedProperty); - internal set => SetValue(IsClosedProperty, value); + internal set => SetValue(IsClosedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty TokenProperty = DependencyProperty.RegisterAttached( diff --git a/src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs b/src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs index 3bbd8cc1f..19f4ee51d 100644 --- a/src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs +++ b/src/Shared/HandyControl_Shared/Controls/Growl/Growl.cs @@ -234,7 +234,7 @@ internal string ConfirmStr public bool ShowDateTime { get => (bool)GetValue(ShowDateTimeProperty); - set => SetValue(ShowDateTimeProperty, value); + set => SetValue(ShowDateTimeProperty, ValueBoxes.BooleanBox(value)); } public string Message diff --git a/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs b/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs index 1093a4fed..30e9a974c 100644 --- a/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs +++ b/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs @@ -143,7 +143,7 @@ private static void OnIsPlayingChanged(DependencyObject d, DependencyPropertyCha public bool IsPlaying { get => (bool) GetValue(IsPlayingProperty); - set => SetValue(IsPlayingProperty, value); + set => SetValue(IsPlayingProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ColumnsProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs b/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs index ba9678dea..abee79ddc 100644 --- a/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs +++ b/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs @@ -271,13 +271,13 @@ private static void OnImageSourceChanged(DependencyObject d, DependencyPropertyC public bool IsFullScreen { get => (bool)GetValue(IsFullScreenProperty); - set => SetValue(IsFullScreenProperty, value); + set => SetValue(IsFullScreenProperty, ValueBoxes.BooleanBox(value)); } public bool ShowImgMap { get => (bool)GetValue(ShowImgMapProperty); - set => SetValue(ShowImgMapProperty, value); + set => SetValue(ShowImgMapProperty, ValueBoxes.BooleanBox(value)); } public BitmapFrame ImageSource @@ -310,7 +310,7 @@ internal long ImgSize internal bool ShowFullScreenButton { get => (bool)GetValue(ShowFullScreenButtonProperty); - set => SetValue(ShowFullScreenButtonProperty, value); + set => SetValue(ShowFullScreenButtonProperty, ValueBoxes.BooleanBox(value)); } internal Thickness ImageMargin @@ -352,7 +352,7 @@ internal double ImageRotate internal bool ShowSmallImgInternal { get => (bool)GetValue(ShowSmallImgInternalProperty); - set => SetValue(ShowSmallImgInternalProperty, value); + set => SetValue(ShowSmallImgInternalProperty, ValueBoxes.BooleanBox(value)); } /// @@ -371,7 +371,7 @@ internal bool ShowSmallImgInternal internal bool ShowCloseButton { get => (bool)GetValue(ShowCloseButtonProperty); - set => SetValue(ShowCloseButtonProperty, value); + set => SetValue(ShowCloseButtonProperty, ValueBoxes.BooleanBox(value)); } /// diff --git a/src/Shared/HandyControl_Shared/Controls/Input/ComboBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/ComboBox.cs index 75188dbdd..33b8b023c 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/ComboBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/ComboBox.cs @@ -169,7 +169,7 @@ protected override void OnSelectionChanged(SelectionChangedEventArgs e) public bool IsError { get => (bool)GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); } /// @@ -220,7 +220,7 @@ public TextType TextType public bool ShowClearButton { get => (bool)GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); } /// @@ -339,7 +339,7 @@ internal string SearchText public bool AutoComplete { get => (bool)GetValue(AutoCompleteProperty); - set => SetValue(AutoCompleteProperty, value); + set => SetValue(AutoCompleteProperty, ValueBoxes.BooleanBox(value)); } /// diff --git a/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs index 51642a310..a8a1e8096 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs @@ -51,7 +51,7 @@ public override void OnApplyTemplate() public bool IsError { get => (bool) GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ErrorStrProperty = DependencyProperty.Register( @@ -78,7 +78,7 @@ public TextType TextType public bool ShowClearButton { get => (bool) GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); } public virtual bool VerifyData() diff --git a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs index 06bb6454b..0f7156d40 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs @@ -153,7 +153,7 @@ private static void OnIsDropDownOpenChanged(DependencyObject d, DependencyProper public bool IsDropDownOpen { get => (bool) GetValue(IsDropDownOpenProperty); - set => SetValue(IsDropDownOpenProperty, value); + set => SetValue(IsDropDownOpenProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty SelectedDateTimeProperty = DependencyProperty.Register( @@ -238,7 +238,7 @@ private void SetTextInternal(string value) public bool IsError { get => (bool) GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ErrorStrProperty = DependencyProperty.Register( @@ -265,7 +265,7 @@ public TextType TextType public bool ShowClearButton { get => (bool) GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); } #endregion diff --git a/src/Shared/HandyControl_Shared/Controls/Input/ImageSelector.cs b/src/Shared/HandyControl_Shared/Controls/Input/ImageSelector.cs index 8d53d5017..fcc605b55 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/ImageSelector.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/ImageSelector.cs @@ -120,7 +120,7 @@ public string Filter public bool HasValue { get => (bool) GetValue(HasValueProperty); - set => SetValue(HasValueProperty, value); + set => SetValue(HasValueProperty, ValueBoxes.BooleanBox(value)); } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs b/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs index 429ce5187..119a4d9fa 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs @@ -321,7 +321,7 @@ public int? DecimalPlaces internal bool ShowUpDownButton { get => (bool)GetValue(ShowUpDownButtonProperty); - set => SetValue(ShowUpDownButtonProperty, value); + set => SetValue(ShowUpDownButtonProperty, ValueBoxes.BooleanBox(value)); } /// @@ -333,7 +333,7 @@ internal bool ShowUpDownButton public bool IsError { get => (bool)GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); } /// @@ -372,7 +372,7 @@ public TextType TextType public bool ShowClearButton { get => (bool)GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); } /// @@ -387,7 +387,7 @@ public bool ShowClearButton public bool IsReadOnly { get => (bool)GetValue(IsReadOnlyProperty); - set => SetValue(IsReadOnlyProperty, value); + set => SetValue(IsReadOnlyProperty, ValueBoxes.BooleanBox(value)); } public Func> VerifyFunc { get; set; } diff --git a/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs index 5fdd95beb..338b47210 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs @@ -20,6 +20,11 @@ public class PasswordBox : Control, IDataInput private const string ElementTextBox = "PART_TextBox"; + private SecureString _password; + + private System.Windows.Controls.TextBox _textBox; + + /// /// 掩码字符 /// @@ -27,46 +32,81 @@ public class PasswordBox : Control, IDataInput System.Windows.Controls.PasswordBox.PasswordCharProperty.AddOwner(typeof(PasswordBox), new FrameworkPropertyMetadata('●')); + public char PasswordChar + { + get => (char)GetValue(PasswordCharProperty); + set => SetValue(PasswordCharProperty, value); + } + /// /// 数据是否错误 /// public static readonly DependencyProperty IsErrorProperty = DependencyProperty.Register( "IsError", typeof(bool), typeof(PasswordBox), new PropertyMetadata(ValueBoxes.FalseBox)); + public bool IsError + { + get => (bool)GetValue(IsErrorProperty); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); + } + /// /// 错误提示 /// public static readonly DependencyProperty ErrorStrProperty = DependencyProperty.Register( "ErrorStr", typeof(string), typeof(PasswordBox), new PropertyMetadata(default(string))); + public string ErrorStr + { + get => (string)GetValue(ErrorStrProperty); + set => SetValue(ErrorStrProperty, value); + } + /// /// 文本类型 /// public static readonly DependencyProperty TextTypeProperty = DependencyProperty.Register( "TextType", typeof(TextType), typeof(PasswordBox), new PropertyMetadata(default(TextType))); + public TextType TextType + { + get => (TextType)GetValue(TextTypeProperty); + set => SetValue(TextTypeProperty, value); + } + /// /// 是否显示清除按钮 /// public static readonly DependencyProperty ShowClearButtonProperty = DependencyProperty.Register( "ShowClearButton", typeof(bool), typeof(PasswordBox), new PropertyMetadata(ValueBoxes.FalseBox)); + public bool ShowClearButton + { + get => (bool)GetValue(ShowClearButtonProperty); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); + } + public static readonly DependencyProperty ShowEyeButtonProperty = DependencyProperty.Register( "ShowEyeButton", typeof(bool), typeof(PasswordBox), new PropertyMetadata(ValueBoxes.FalseBox)); + public bool ShowEyeButton + { + get => (bool)GetValue(ShowEyeButtonProperty); + set => SetValue(ShowEyeButtonProperty, ValueBoxes.BooleanBox(value)); + } + public static readonly DependencyProperty ShowPasswordProperty = DependencyProperty.Register( "ShowPassword", typeof(bool), typeof(PasswordBox), new PropertyMetadata(ValueBoxes.FalseBox, OnShowPasswordChanged)); - private SecureString _password; - - private System.Windows.Controls.TextBox _textBox; - - public PasswordBox() + public bool ShowPassword { - CommandBindings.Add(new CommandBinding(ControlCommands.Clear, (s, e) => Clear())); + get => (bool)GetValue(ShowPasswordProperty); + set => SetValue(ShowPasswordProperty, ValueBoxes.BooleanBox(value)); } + public PasswordBox() => CommandBindings.Add(new CommandBinding(ControlCommands.Clear, (s, e) => Clear())); + public System.Windows.Controls.PasswordBox ActualPasswordBox { get; set; } [DefaultValue("")] @@ -101,50 +141,8 @@ public string Password [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public SecureString SecurePassword => ActualPasswordBox?.SecurePassword; - public char PasswordChar - { - get => (char) GetValue(PasswordCharProperty); - set => SetValue(PasswordCharProperty, value); - } - - public bool ShowEyeButton - { - get => (bool) GetValue(ShowEyeButtonProperty); - set => SetValue(ShowEyeButtonProperty, value); - } - - public bool ShowPassword - { - get => (bool) GetValue(ShowPasswordProperty); - set => SetValue(ShowPasswordProperty, value); - } - public Func> VerifyFunc { get; set; } - public bool IsError - { - get => (bool) GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); - } - - public string ErrorStr - { - get => (string) GetValue(ErrorStrProperty); - set => SetValue(ErrorStrProperty, value); - } - - public TextType TextType - { - get => (TextType) GetValue(TextTypeProperty); - set => SetValue(TextTypeProperty, value); - } - - public bool ShowClearButton - { - get => (bool) GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); - } - public virtual bool VerifyData() { OperationResult result; diff --git a/src/Shared/HandyControl_Shared/Controls/Input/SearchBar.cs b/src/Shared/HandyControl_Shared/Controls/Input/SearchBar.cs index 753416403..b2713f18c 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/SearchBar.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/SearchBar.cs @@ -77,7 +77,7 @@ private void OnSearchStarted() public bool IsRealTime { get => (bool)GetValue(IsRealTimeProperty); - set => SetValue(IsRealTimeProperty, value); + set => SetValue(IsRealTimeProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty CommandProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs index 8cc0edf59..ee682c731 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs @@ -36,7 +36,7 @@ protected override void OnTextChanged(TextChangedEventArgs e) public bool IsError { get => (bool) GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); } /// @@ -72,7 +72,7 @@ public TextType TextType public bool ShowClearButton { get => (bool) GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); } public virtual bool VerifyData() diff --git a/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs index 4a6b84e81..066228a46 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs @@ -130,7 +130,7 @@ private static object CoerceDisplayTime(DependencyObject d, object value) public bool IsDropDownOpen { get => (bool)GetValue(IsDropDownOpenProperty); - set => SetValue(IsDropDownOpenProperty, value); + set => SetValue(IsDropDownOpenProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty IsDropDownOpenProperty = @@ -262,7 +262,7 @@ private void SetTextInternal(string value) public bool IsError { get => (bool)GetValue(IsErrorProperty); - set => SetValue(IsErrorProperty, value); + set => SetValue(IsErrorProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ErrorStrProperty = DependencyProperty.Register( @@ -289,7 +289,7 @@ public TextType TextType public bool ShowClearButton { get => (bool)GetValue(ShowClearButtonProperty); - set => SetValue(ShowClearButtonProperty, value); + set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ClockProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs index f0c8c906d..4d3eff8a3 100644 --- a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs +++ b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs @@ -31,7 +31,7 @@ public abstract class LoadingBase : ContentControl public bool IsRunning { get => (bool) GetValue(IsRunningProperty); - set => SetValue(IsRunningProperty, value); + set => SetValue(IsRunningProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty DotCountProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs index b4ef744d0..21b6eb1d3 100644 --- a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs +++ b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs @@ -4,6 +4,7 @@ using System.Windows.Data; using System.Windows.Media; using System.Windows.Media.Animation; +using HandyControl.Data; namespace HandyControl.Controls @@ -27,7 +28,7 @@ public double DotOffSet public bool NeedHidden { get => (bool) GetValue(NeedHiddenProperty); - set => SetValue(NeedHiddenProperty, value); + set => SetValue(NeedHiddenProperty, ValueBoxes.BooleanBox(value)); } static LoadingCircle() diff --git a/src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs b/src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs index de1abef54..c6874b348 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/AnimationPath.cs @@ -100,7 +100,7 @@ public Duration Duration public bool IsPlaying { get => (bool)GetValue(IsPlayingProperty); - set => SetValue(IsPlayingProperty, value); + set => SetValue(IsPlayingProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty RepeatBehaviorProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Badge.cs b/src/Shared/HandyControl_Shared/Controls/Other/Badge.cs index d9ae22d03..15ffe2f21 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Badge.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Badge.cs @@ -86,7 +86,7 @@ public Thickness BadgeMargin public bool ShowBadge { get => (bool) GetValue(ShowBadgeProperty); - set => SetValue(ShowBadgeProperty, value); + set => SetValue(ShowBadgeProperty, ValueBoxes.BooleanBox(value)); } protected override Geometry GetLayoutClip(Size layoutSlotSize) => null; diff --git a/src/Shared/HandyControl_Shared/Controls/Other/ChatBubble.cs b/src/Shared/HandyControl_Shared/Controls/Other/ChatBubble.cs index 353ae9b17..a717ad304 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/ChatBubble.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/ChatBubble.cs @@ -30,7 +30,7 @@ public ChatMessageType Type public bool IsRead { get => (bool) GetValue(IsReadProperty); - set => SetValue(IsReadProperty, value); + set => SetValue(IsReadProperty, ValueBoxes.BooleanBox(value)); } public static void SetMaxWidth(DependencyObject element, double value) diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Drawer.cs b/src/Shared/HandyControl_Shared/Controls/Other/Drawer.cs index db9fb3c08..a4b6a0728 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Drawer.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Drawer.cs @@ -109,7 +109,7 @@ private static void OnIsOpenChanged(DependencyObject d, DependencyPropertyChange public bool IsOpen { get => (bool) GetValue(IsOpenProperty); - set => SetValue(IsOpenProperty, value); + set => SetValue(IsOpenProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty MaskCanCloseProperty = DependencyProperty.Register( @@ -118,7 +118,7 @@ public bool IsOpen public bool MaskCanClose { get => (bool) GetValue(MaskCanCloseProperty); - set => SetValue(MaskCanCloseProperty, value); + set => SetValue(MaskCanCloseProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ShowMaskProperty = DependencyProperty.Register( @@ -127,7 +127,7 @@ public bool MaskCanClose public bool ShowMask { get => (bool) GetValue(ShowMaskProperty); - set => SetValue(ShowMaskProperty, value); + set => SetValue(ShowMaskProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty DockProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Other/GotoTop.cs b/src/Shared/HandyControl_Shared/Controls/Other/GotoTop.cs index d7acb02e4..bc70ea284 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/GotoTop.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/GotoTop.cs @@ -60,7 +60,7 @@ private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) public bool Animated { get => (bool) GetValue(AnimatedProperty); - set => SetValue(AnimatedProperty, value); + set => SetValue(AnimatedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty AnimationTimeProperty = DependencyProperty.Register( @@ -87,7 +87,7 @@ public double HidingHeight public bool AutoHiding { get => (bool) GetValue(AutoHidingProperty); - set => SetValue(AutoHidingProperty, value); + set => SetValue(AutoHidingProperty, ValueBoxes.BooleanBox(value)); } protected override void OnClick() diff --git a/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs b/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs index 02ca46338..c70f68dc8 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/NotifyIcon.cs @@ -335,7 +335,7 @@ private static void OnIsBlinkChanged(DependencyObject d, DependencyPropertyChang public bool IsBlink { get => (bool)GetValue(IsBlinkProperty); - set => SetValue(IsBlinkProperty, value); + set => SetValue(IsBlinkProperty, ValueBoxes.BooleanBox(value)); } private void DispatcherTimerBlinkTick(object sender, EventArgs e) diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs b/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs index 6241bb0ab..e02f01331 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Pagination.cs @@ -231,7 +231,7 @@ public int MaxPageInterval public bool IsJumpEnabled { get => (bool) GetValue(IsJumpEnabledProperty); - set => SetValue(IsJumpEnabledProperty, value); + set => SetValue(IsJumpEnabledProperty, ValueBoxes.BooleanBox(value)); } #endregion diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Poptip.cs b/src/Shared/HandyControl_Shared/Controls/Other/Poptip.cs index 40faef20d..86152cc08 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Poptip.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Poptip.cs @@ -145,7 +145,7 @@ public static bool GetIsOpen(DependencyObject element) public bool IsOpen { get => (bool) GetValue(IsOpenProperty); - set => SetValue(IsOpenProperty, value); + set => SetValue(IsOpenProperty, ValueBoxes.BooleanBox(value)); } public static Poptip Default => new Poptip(); diff --git a/src/Shared/HandyControl_Shared/Controls/Other/ScrollViewer.cs b/src/Shared/HandyControl_Shared/Controls/Other/ScrollViewer.cs index e39d662be..ab835a593 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/ScrollViewer.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/ScrollViewer.cs @@ -44,7 +44,7 @@ public Orientation Orientation public bool CanMouseWheel { get => (bool) GetValue(CanMouseWheelProperty); - set => SetValue(CanMouseWheelProperty, value); + set => SetValue(CanMouseWheelProperty, ValueBoxes.BooleanBox(value)); } protected override void OnMouseWheel(MouseWheelEventArgs e) @@ -155,7 +155,7 @@ protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParam public bool IsInertiaEnabled { get => (bool) GetValue(IsInertiaEnabledProperty); - set => SetValue(IsInertiaEnabledProperty, value); + set => SetValue(IsInertiaEnabledProperty, ValueBoxes.BooleanBox(value)); } /// @@ -170,7 +170,7 @@ public bool IsInertiaEnabled public bool IsPenetrating { get => (bool) GetValue(IsPenetratingProperty); - set => SetValue(IsPenetratingProperty, value); + set => SetValue(IsPenetratingProperty, ValueBoxes.BooleanBox(value)); } public static void SetIsPenetrating(DependencyObject element, bool value) => element.SetValue(IsPenetratingProperty, ValueBoxes.BooleanBox(value)); diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Watermark.cs b/src/Shared/HandyControl_Shared/Controls/Other/Watermark.cs index 2fe66be96..6d3c3e3bc 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Watermark.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Watermark.cs @@ -77,7 +77,7 @@ public Brush MarkBrush public bool AutoSizeEnabled { get => (bool) GetValue(AutoSizeEnabledProperty); - set => SetValue(AutoSizeEnabledProperty, value); + set => SetValue(AutoSizeEnabledProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty MarkMarginProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs b/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs index 1ad316405..0fe9e68af 100644 --- a/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs +++ b/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs @@ -23,7 +23,7 @@ public double Diameter public bool KeepVertical { get => (bool) GetValue(KeepVerticalProperty); - set => SetValue(KeepVerticalProperty, value); + set => SetValue(KeepVerticalProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty OffsetAngleProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs b/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs index c94cbc434..b633c1fa3 100644 --- a/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs +++ b/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs @@ -47,7 +47,7 @@ public int Span public bool IsFixed { get => (bool) GetValue(IsFixedProperty); - set => SetValue(IsFixedProperty, value); + set => SetValue(IsFixedProperty, ValueBoxes.BooleanBox(value)); } internal int GetLayoutCellCount(ColLayoutStatus status) diff --git a/src/Shared/HandyControl_Shared/Controls/ProgressBar/CircleProgressBar.cs b/src/Shared/HandyControl_Shared/Controls/ProgressBar/CircleProgressBar.cs index 474ced467..e1ed5dfa8 100644 --- a/src/Shared/HandyControl_Shared/Controls/ProgressBar/CircleProgressBar.cs +++ b/src/Shared/HandyControl_Shared/Controls/ProgressBar/CircleProgressBar.cs @@ -38,7 +38,7 @@ public string Text public bool ShowText { get => (bool) GetValue(ShowTextProperty); - set => SetValue(ShowTextProperty, value); + set => SetValue(ShowTextProperty, ValueBoxes.BooleanBox(value)); } public double ArcThickness diff --git a/src/Shared/HandyControl_Shared/Controls/ProgressBar/WaveProgressBar.cs b/src/Shared/HandyControl_Shared/Controls/ProgressBar/WaveProgressBar.cs index 196665ca6..3d6ac4c18 100644 --- a/src/Shared/HandyControl_Shared/Controls/ProgressBar/WaveProgressBar.cs +++ b/src/Shared/HandyControl_Shared/Controls/ProgressBar/WaveProgressBar.cs @@ -86,7 +86,7 @@ public string Text public bool ShowText { get => (bool)GetValue(ShowTextProperty); - set => SetValue(ShowTextProperty, value); + set => SetValue(ShowTextProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty WaveFillProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/HorizontalAlignmentPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/HorizontalAlignmentPropertyEditor.cs index 1c5bef220..89d7750f5 100644 --- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/HorizontalAlignmentPropertyEditor.cs +++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/HorizontalAlignmentPropertyEditor.cs @@ -5,6 +5,7 @@ using System.Windows.Data; using System.Windows.Media; using System.Windows.Shapes; +using HandyControl.Data; using HandyControl.Tools; namespace HandyControl.Controls @@ -35,7 +36,7 @@ public override DataTemplate SelectTemplate(object item, DependencyObject contai var factory = new FrameworkElementFactory(typeof(Path)); factory.SetValue(FrameworkElement.WidthProperty, 12.0); - factory.SetValue(FrameworkElement.HeightProperty, 10.0); + factory.SetValue(FrameworkElement.HeightProperty, ValueBoxes.Double10Box); factory.SetBinding(Shape.FillProperty, new Binding(Control.ForegroundProperty.Name) { RelativeSource = new RelativeSource diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/VerticalAlignmentPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/VerticalAlignmentPropertyEditor.cs index fb4f445b5..6311c9263 100644 --- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/VerticalAlignmentPropertyEditor.cs +++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/VerticalAlignmentPropertyEditor.cs @@ -5,6 +5,7 @@ using System.Windows.Data; using System.Windows.Media; using System.Windows.Shapes; +using HandyControl.Data; using HandyControl.Tools; namespace HandyControl.Controls @@ -34,7 +35,7 @@ public override DataTemplate SelectTemplate(object item, DependencyObject contai }; var factory = new FrameworkElementFactory(typeof(Path)); - factory.SetValue(FrameworkElement.WidthProperty, 10.0); + factory.SetValue(FrameworkElement.WidthProperty, ValueBoxes.Double10Box); factory.SetValue(FrameworkElement.HeightProperty, 12.0); factory.SetBinding(Shape.FillProperty, new Binding(Control.ForegroundProperty.Name) { diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyItem.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyItem.cs index 3ef9888ac..942078d8c 100644 --- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyItem.cs @@ -68,7 +68,7 @@ public string Description public bool IsReadOnly { get => (bool)GetValue(IsReadOnlyProperty); - set => SetValue(IsReadOnlyProperty, value); + set => SetValue(IsReadOnlyProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty DefaultValueProperty = DependencyProperty.Register( @@ -113,7 +113,7 @@ public FrameworkElement EditorElement public bool IsSelected { get => (bool)GetValue(IsSelectedProperty); - set => SetValue(IsSelectedProperty, value); + set => SetValue(IsSelectedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty IsExpandedEnabledProperty = DependencyProperty.Register( @@ -122,7 +122,7 @@ public bool IsSelected public bool IsExpandedEnabled { get => (bool)GetValue(IsExpandedEnabledProperty); - set => SetValue(IsExpandedEnabledProperty, value); + set => SetValue(IsExpandedEnabledProperty, ValueBoxes.BooleanBox(value)); } public PropertyDescriptor PropertyDescriptor { get; set; } diff --git a/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs b/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs index a8acf7418..3c932a857 100644 --- a/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs +++ b/src/Shared/HandyControl_Shared/Controls/Rate/Rate.cs @@ -108,13 +108,13 @@ public Rate() public bool AllowHalf { get => (bool) GetValue(AllowHalfProperty); - set => SetValue(AllowHalfProperty, value); + set => SetValue(AllowHalfProperty, ValueBoxes.BooleanBox(value)); } public bool AllowClear { get => (bool) GetValue(AllowClearProperty); - set => SetValue(AllowClearProperty, value); + set => SetValue(AllowClearProperty, ValueBoxes.BooleanBox(value)); } public Geometry Icon @@ -150,13 +150,13 @@ public string Text public bool ShowText { get => (bool) GetValue(ShowTextProperty); - set => SetValue(ShowTextProperty, value); + set => SetValue(ShowTextProperty, ValueBoxes.BooleanBox(value)); } public bool IsReadOnly { get => (bool)GetValue(IsReadOnlyProperty); - set => SetValue(IsReadOnlyProperty, value); + set => SetValue(IsReadOnlyProperty, ValueBoxes.BooleanBox(value)); } private void RateItemValueChanged(object sender, RoutedEventArgs e) => diff --git a/src/Shared/HandyControl_Shared/Controls/Rate/RateItem.cs b/src/Shared/HandyControl_Shared/Controls/Rate/RateItem.cs index 9a0ae623d..23e88377b 100644 --- a/src/Shared/HandyControl_Shared/Controls/Rate/RateItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/Rate/RateItem.cs @@ -58,13 +58,13 @@ public RateItem() public bool AllowClear { get => (bool) GetValue(AllowClearProperty); - set => SetValue(AllowClearProperty, value); + set => SetValue(AllowClearProperty, ValueBoxes.BooleanBox(value)); } public bool AllowHalf { get => (bool) GetValue(AllowHalfProperty); - set => SetValue(AllowHalfProperty, value); + set => SetValue(AllowHalfProperty, ValueBoxes.BooleanBox(value)); } public Geometry Icon @@ -76,13 +76,13 @@ public Geometry Icon internal bool IsSelected { get => (bool) GetValue(IsSelectedProperty); - set => SetValue(IsSelectedProperty, value); + set => SetValue(IsSelectedProperty, ValueBoxes.BooleanBox(value)); } public bool IsReadOnly { get => (bool)GetValue(IsReadOnlyProperty); - set => SetValue(IsReadOnlyProperty, value); + set => SetValue(IsReadOnlyProperty, ValueBoxes.BooleanBox(value)); } internal bool IsHalf diff --git a/src/Shared/HandyControl_Shared/Controls/Screenshot/ScreenshotWindow.cs b/src/Shared/HandyControl_Shared/Controls/Screenshot/ScreenshotWindow.cs index 34e800d82..6f8e85d41 100644 --- a/src/Shared/HandyControl_Shared/Controls/Screenshot/ScreenshotWindow.cs +++ b/src/Shared/HandyControl_Shared/Controls/Screenshot/ScreenshotWindow.cs @@ -125,7 +125,7 @@ public class ScreenshotWindow : System.Windows.Window public bool IsDrawing { get => (bool)GetValue(IsDrawingProperty); - internal set => SetValue(IsDrawingProperty, value); + internal set => SetValue(IsDrawingProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty IsSelectingProperty = DependencyProperty.Register( @@ -134,7 +134,7 @@ public bool IsDrawing public bool IsSelecting { get => (bool)GetValue(IsSelectingProperty); - internal set => SetValue(IsSelectingProperty, value); + internal set => SetValue(IsSelectingProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty SizeProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs index 5d31e279f..b808c4818 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs @@ -127,7 +127,7 @@ private void SwitchPanelArea(SideMenuItem oldItem) public bool AutoSelect { get => (bool) GetValue(AutoSelectProperty); - set => SetValue(AutoSelectProperty, value); + set => SetValue(AutoSelectProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ExpandModeProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs index 1fee5b8c5..2b6a8002f 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs @@ -102,7 +102,7 @@ public event RoutedEventHandler Selected public bool IsSelected { get => (bool) GetValue(IsSelectedProperty); - set => SetValue(IsSelectedProperty, value); + set => SetValue(IsSelectedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty RoleProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeSlider.cs b/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeSlider.cs index 72902db73..8220142a5 100644 --- a/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeSlider.cs +++ b/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeSlider.cs @@ -146,7 +146,7 @@ public Orientation Orientation public bool IsDirectionReversed { get => (bool)GetValue(IsDirectionReversedProperty); - set => SetValue(IsDirectionReversedProperty, value); + set => SetValue(IsDirectionReversedProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty DelayProperty = RepeatButton.DelayProperty.AddOwner(typeof(RangeSlider), new FrameworkPropertyMetadata(GetKeyboardDelay())); @@ -206,7 +206,7 @@ public int AutoToolTipPrecision public bool IsSnapToTickEnabled { get => (bool)GetValue(IsSnapToTickEnabledProperty); - set => SetValue(IsSnapToTickEnabledProperty, value); + set => SetValue(IsSnapToTickEnabledProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty TickPlacementProperty = DependencyProperty.Register( @@ -243,7 +243,7 @@ public DoubleCollection Ticks public bool IsMoveToPointEnabled { get => (bool)GetValue(IsMoveToPointEnabledProperty); - set => SetValue(IsMoveToPointEnabledProperty, value); + set => SetValue(IsMoveToPointEnabledProperty, ValueBoxes.BooleanBox(value)); } protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e) diff --git a/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeTrack.cs b/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeTrack.cs index 678ba24f3..ca89d612b 100644 --- a/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeTrack.cs +++ b/src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeTrack.cs @@ -170,7 +170,7 @@ public double ValueEnd public bool IsDirectionReversed { get => (bool) GetValue(IsDirectionReversedProperty); - set => SetValue(IsDirectionReversedProperty, value); + set => SetValue(IsDirectionReversedProperty, ValueBoxes.BooleanBox(value)); } protected override Visual GetVisualChild(int index) diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs index 0ab1ca185..5c14721cc 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabControl.cs @@ -59,7 +59,7 @@ public class TabControl : System.Windows.Controls.TabControl public bool IsAnimationEnabled { get => (bool)GetValue(IsAnimationEnabledProperty); - set => SetValue(IsAnimationEnabledProperty, value); + set => SetValue(IsAnimationEnabledProperty, ValueBoxes.BooleanBox(value)); } /// @@ -74,7 +74,7 @@ public bool IsAnimationEnabled public bool IsDraggable { get => (bool)GetValue(IsDraggableProperty); - set => SetValue(IsDraggableProperty, value); + set => SetValue(IsDraggableProperty, ValueBoxes.BooleanBox(value)); } /// @@ -131,7 +131,7 @@ public bool ShowContextMenu public bool IsTabFillEnabled { get => (bool)GetValue(IsTabFillEnabledProperty); - set => SetValue(IsTabFillEnabledProperty, value); + set => SetValue(IsTabFillEnabledProperty, ValueBoxes.BooleanBox(value)); } /// @@ -176,7 +176,7 @@ public double TabItemHeight public bool IsScrollable { get => (bool) GetValue(IsScrollableProperty); - set => SetValue(IsScrollableProperty, value); + set => SetValue(IsScrollableProperty, ValueBoxes.BooleanBox(value)); } /// @@ -191,7 +191,7 @@ public bool IsScrollable public bool ShowOverflowButton { get => (bool) GetValue(ShowOverflowButtonProperty); - set => SetValue(ShowOverflowButtonProperty, value); + set => SetValue(ShowOverflowButtonProperty, ValueBoxes.BooleanBox(value)); } /// @@ -206,7 +206,7 @@ public bool ShowOverflowButton public bool ShowScrollButton { get => (bool) GetValue(ShowScrollButtonProperty); - set => SetValue(ShowScrollButtonProperty, value); + set => SetValue(ShowScrollButtonProperty, ValueBoxes.BooleanBox(value)); } /// diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs index 3fb337b5d..8ef16a65c 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabItem.cs @@ -173,7 +173,7 @@ private static void OnShowContextMenuChanged(DependencyObject d, DependencyPrope public bool ShowContextMenu { get => (bool) GetValue(ShowContextMenuProperty); - set => SetValue(ShowContextMenuProperty, value); + set => SetValue(ShowContextMenuProperty, ValueBoxes.BooleanBox(value)); } public static void SetShowContextMenu(DependencyObject element, bool value) diff --git a/src/Shared/HandyControl_Shared/Controls/TabControl/TabPanel.cs b/src/Shared/HandyControl_Shared/Controls/TabControl/TabPanel.cs index f1c26ace9..a695649e9 100644 --- a/src/Shared/HandyControl_Shared/Controls/TabControl/TabPanel.cs +++ b/src/Shared/HandyControl_Shared/Controls/TabControl/TabPanel.cs @@ -53,7 +53,7 @@ public Duration FluidMoveDuration public bool IsTabFillEnabled { get => (bool)GetValue(IsTabFillEnabledProperty); - set => SetValue(IsTabFillEnabledProperty, value); + set => SetValue(IsTabFillEnabledProperty, ValueBoxes.BooleanBox(value)); } /// diff --git a/src/Shared/HandyControl_Shared/Controls/Tag/Tag.cs b/src/Shared/HandyControl_Shared/Controls/Tag/Tag.cs index 737794f5f..f8dec4e31 100644 --- a/src/Shared/HandyControl_Shared/Controls/Tag/Tag.cs +++ b/src/Shared/HandyControl_Shared/Controls/Tag/Tag.cs @@ -27,7 +27,7 @@ public Tag() public bool ShowCloseButton { get => (bool) GetValue(ShowCloseButtonProperty); - set => SetValue(ShowCloseButtonProperty, value); + set => SetValue(ShowCloseButtonProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty SelectableProperty = DependencyProperty.Register( @@ -36,7 +36,7 @@ public bool ShowCloseButton public bool Selectable { get => (bool) GetValue(SelectableProperty); - set => SetValue(SelectableProperty, value); + set => SetValue(SelectableProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register( @@ -49,7 +49,7 @@ public bool Selectable public bool IsSelected { get => (bool) GetValue(IsSelectedProperty); - set => SetValue(IsSelectedProperty, value); + set => SetValue(IsSelectedProperty, ValueBoxes.BooleanBox(value)); } public static readonly RoutedEvent SelectedEvent = EventManager.RegisterRoutedEvent("Selected", RoutingStrategy.Bubble, typeof(EventHandler), typeof(Tag)); diff --git a/src/Shared/HandyControl_Shared/Controls/Tag/TagPanel.cs b/src/Shared/HandyControl_Shared/Controls/Tag/TagPanel.cs index 560af60b9..dd0ac4471 100644 --- a/src/Shared/HandyControl_Shared/Controls/Tag/TagPanel.cs +++ b/src/Shared/HandyControl_Shared/Controls/Tag/TagPanel.cs @@ -45,7 +45,7 @@ public event EventHandler AddTagButtonClick public bool ShowAddButton { get => (bool) GetValue(ShowAddButtonProperty); - set => SetValue(ShowAddButtonProperty, value); + set => SetValue(ShowAddButtonProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty TagMarginProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Time/CalendarWithClock.cs b/src/Shared/HandyControl_Shared/Controls/Time/CalendarWithClock.cs index e8e2c3538..27b79b58b 100644 --- a/src/Shared/HandyControl_Shared/Controls/Time/CalendarWithClock.cs +++ b/src/Shared/HandyControl_Shared/Controls/Time/CalendarWithClock.cs @@ -87,7 +87,7 @@ public string DateTimeFormat public bool ShowConfirmButton { get => (bool)GetValue(ShowConfirmButtonProperty); - set => SetValue(ShowConfirmButtonProperty, value); + set => SetValue(ShowConfirmButtonProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty SelectedDateTimeProperty = DependencyProperty.Register( diff --git a/src/Shared/HandyControl_Shared/Controls/Time/Clock/ClockBase.cs b/src/Shared/HandyControl_Shared/Controls/Time/Clock/ClockBase.cs index c2ef4420a..d524d12c2 100644 --- a/src/Shared/HandyControl_Shared/Controls/Time/Clock/ClockBase.cs +++ b/src/Shared/HandyControl_Shared/Controls/Time/Clock/ClockBase.cs @@ -82,7 +82,7 @@ public DateTime DisplayTime internal bool ShowConfirmButton { get => (bool) GetValue(ShowConfirmButtonProperty); - set => SetValue(ShowConfirmButtonProperty, value); + set => SetValue(ShowConfirmButtonProperty, ValueBoxes.BooleanBox(value)); } protected virtual void OnSelectedTimeChanged(FunctionEventArgs e) => RaiseEvent(e); diff --git a/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs b/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs index fdff8de5c..fd1ef960c 100644 --- a/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs +++ b/src/Shared/HandyControl_Shared/Controls/Time/TimeBar/TimeBar.cs @@ -216,7 +216,7 @@ private void CheckNull() public bool ShowSpeStr { get => (bool)GetValue(ShowSpeStrProperty); - set => SetValue(ShowSpeStrProperty, value); + set => SetValue(ShowSpeStrProperty, ValueBoxes.BooleanBox(value)); } /// diff --git a/src/Shared/HandyControl_Shared/Controls/Transfer/TransferItem.cs b/src/Shared/HandyControl_Shared/Controls/Transfer/TransferItem.cs index 8e798e806..b7e623fcc 100644 --- a/src/Shared/HandyControl_Shared/Controls/Transfer/TransferItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/Transfer/TransferItem.cs @@ -11,7 +11,7 @@ public class TransferItem : SelectableItem public bool IsTransferred { get => (bool) GetValue(IsTransferredProperty); - set => SetValue(IsTransferredProperty, value); + set => SetValue(IsTransferredProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty IsOriginProperty = DependencyProperty.Register( @@ -20,7 +20,7 @@ public bool IsTransferred public bool IsOrigin { get => (bool) GetValue(IsOriginProperty); - internal set => SetValue(IsOriginProperty, value); + internal set => SetValue(IsOriginProperty, ValueBoxes.BooleanBox(value)); } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Controls/Window/MessageBox.cs b/src/Shared/HandyControl_Shared/Controls/Window/MessageBox.cs index 1463b2f51..d82706223 100644 --- a/src/Shared/HandyControl_Shared/Controls/Window/MessageBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Window/MessageBox.cs @@ -61,7 +61,7 @@ public Brush ImageBrush public bool ShowImage { get => (bool)GetValue(ShowImageProperty); - set => SetValue(ShowImageProperty, value); + set => SetValue(ShowImageProperty, ValueBoxes.BooleanBox(value)); } private MessageBox() diff --git a/src/Shared/HandyControl_Shared/Controls/Window/PopupWindow.cs b/src/Shared/HandyControl_Shared/Controls/Window/PopupWindow.cs index c37ab0f51..dcb20371f 100644 --- a/src/Shared/HandyControl_Shared/Controls/Window/PopupWindow.cs +++ b/src/Shared/HandyControl_Shared/Controls/Window/PopupWindow.cs @@ -109,7 +109,7 @@ public PopupWindow() public bool ShowTitle { get => (bool) GetValue(ShowTitleProperty); - set => SetValue(ShowTitleProperty, value); + set => SetValue(ShowTitleProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ShowCancelProperty = DependencyProperty.Register( @@ -118,7 +118,7 @@ public bool ShowTitle public bool ShowCancel { get => (bool)GetValue(ShowCancelProperty); - set => SetValue(ShowCancelProperty, value); + set => SetValue(ShowCancelProperty, ValueBoxes.BooleanBox(value)); } public static readonly DependencyProperty ShowBorderProperty = DependencyProperty.Register( @@ -127,7 +127,7 @@ public bool ShowCancel public bool ShowBorder { get => (bool) GetValue(ShowBorderProperty); - set => SetValue(ShowBorderProperty, value); + set => SetValue(ShowBorderProperty, ValueBoxes.BooleanBox(value)); } private void TitleBlock_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) diff --git a/src/Shared/HandyControl_Shared/Controls/Window/Window.cs b/src/Shared/HandyControl_Shared/Controls/Window/Window.cs index 1d06b0759..4447445ca 100644 --- a/src/Shared/HandyControl_Shared/Controls/Window/Window.cs +++ b/src/Shared/HandyControl_Shared/Controls/Window/Window.cs @@ -208,7 +208,7 @@ public double NonClientAreaHeight public bool IsFullScreen { get => (bool)GetValue(IsFullScreenProperty); - set => SetValue(IsFullScreenProperty, value); + set => SetValue(IsFullScreenProperty, ValueBoxes.BooleanBox(value)); } public object NonClientAreaContent @@ -256,13 +256,13 @@ public Brush NonClientAreaForeground public bool ShowNonClientArea { get => (bool)GetValue(ShowNonClientAreaProperty); - set => SetValue(ShowNonClientAreaProperty, value); + set => SetValue(ShowNonClientAreaProperty, ValueBoxes.BooleanBox(value)); } public bool ShowTitle { get => (bool)GetValue(ShowTitleProperty); - set => SetValue(ShowTitleProperty, value); + set => SetValue(ShowTitleProperty, ValueBoxes.BooleanBox(value)); } private static void OnShowNonClientAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) diff --git a/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehavior.cs b/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehavior.cs index 40da23b0b..ebf168d91 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehavior.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehavior.cs @@ -79,7 +79,7 @@ public bool FloatAbove { get => (bool) GetValue(FloatAboveProperty); - set => SetValue(FloatAboveProperty, value); + set => SetValue(FloatAboveProperty, ValueBoxes.BooleanBox(value)); } public TagType InitialTag @@ -283,7 +283,7 @@ private static void RemoveTransform(FrameworkElement child) private static void SetHasTransformWrapper(DependencyObject obj, bool value) { - obj.SetValue(HasTransformWrapperProperty, value); + obj.SetValue(HasTransformWrapperProperty, ValueBoxes.BooleanBox(value)); } private static void SetOverlay(DependencyObject obj, object value) diff --git a/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehaviorBase.cs b/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehaviorBase.cs index cf21a814a..de2548a95 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehaviorBase.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/Behavior/FluidMoveBehaviorBase.cs @@ -46,7 +46,7 @@ public bool IsActive { get => (bool) GetValue(IsActiveProperty); - set => SetValue(IsActiveProperty, value); + set => SetValue(IsActiveProperty, ValueBoxes.BooleanBox(value)); } protected virtual bool ShouldSkipInitialLayout => diff --git a/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehavior.cs b/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehavior.cs index 9245eaf63..17eeba896 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehavior.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehavior.cs @@ -27,9 +27,8 @@ public class MouseDragElementBehavior : Behavior public bool ConstrainToParentBounds { - get => - (bool) GetValue(ConstrainToParentBoundsProperty); - set => SetValue(ConstrainToParentBoundsProperty, value); + get => (bool) GetValue(ConstrainToParentBoundsProperty); + set => SetValue(ConstrainToParentBoundsProperty, ValueBoxes.BooleanBox(value)); } private Rect ElementBounds diff --git a/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehaviorEx.cs b/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehaviorEx.cs index 9232676f7..277939710 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehaviorEx.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/Behavior/MouseDragElementBehaviorEx.cs @@ -50,7 +50,7 @@ public double Y public bool ConstrainToParentBounds { get => (bool)GetValue(MouseDragElementBehavior.ConstrainToParentBoundsProperty); - set => SetValue(MouseDragElementBehavior.ConstrainToParentBoundsProperty, value); + set => SetValue(MouseDragElementBehavior.ConstrainToParentBoundsProperty, ValueBoxes.BooleanBox(value)); } private Rect ElementBounds diff --git a/src/Shared/HandyControl_Shared/Interactivity/EventToCommand.cs b/src/Shared/HandyControl_Shared/Interactivity/EventToCommand.cs index dca2bfae9..7aa3bbe8c 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/EventToCommand.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/EventToCommand.cs @@ -96,7 +96,7 @@ public object CommandParameterValue public bool MustToggleIsEnabled { get => (bool) GetValue(MustToggleIsEnabledProperty); - set => SetValue(MustToggleIsEnabledProperty, value); + set => SetValue(MustToggleIsEnabledProperty, ValueBoxes.BooleanBox(value)); } public bool MustToggleIsEnabledValue @@ -127,7 +127,7 @@ public object EventArgsConverterParameter public bool AlwaysInvokeCommand { get => (bool) GetValue(AlwaysInvokeCommandProperty); - set => SetValue(AlwaysInvokeCommandProperty, value); + set => SetValue(AlwaysInvokeCommandProperty, ValueBoxes.BooleanBox(value)); } protected override void OnAttached() diff --git a/src/Shared/HandyControl_Shared/Interactivity/ExtendedVisualStateManager.cs b/src/Shared/HandyControl_Shared/Interactivity/ExtendedVisualStateManager.cs index da7abd088..f7e1d4364 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/ExtendedVisualStateManager.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/ExtendedVisualStateManager.cs @@ -879,7 +879,7 @@ internal static void SetCurrentState(DependencyObject obj, VisualState value) internal static void SetDidCacheBackground(DependencyObject obj, bool value) { - obj.SetValue(DidCacheBackgroundProperty, value); + obj.SetValue(DidCacheBackgroundProperty, ValueBoxes.BooleanBox(value)); } internal static void SetLayoutStoryboard(DependencyObject obj, Storyboard value) @@ -937,7 +937,7 @@ internal static void SetTransitionEffectStoryboard(DependencyObject obj, Storybo public static void SetUseFluidLayout(DependencyObject obj, bool value) { - obj.SetValue(UseFluidLayoutProperty, value); + obj.SetValue(UseFluidLayoutProperty, ValueBoxes.BooleanBox(value)); } private static void StopAnimations() diff --git a/src/Shared/HandyControl_Shared/Interactivity/TriggerAction.cs b/src/Shared/HandyControl_Shared/Interactivity/TriggerAction.cs index c859d6a12..ed18ba455 100644 --- a/src/Shared/HandyControl_Shared/Interactivity/TriggerAction.cs +++ b/src/Shared/HandyControl_Shared/Interactivity/TriggerAction.cs @@ -3,6 +3,7 @@ using System.Windows; using System.Windows.Controls.Primitives; using System.Windows.Media.Animation; +using HandyControl.Data; namespace HandyControl.Interactivity { @@ -43,9 +44,8 @@ protected virtual Type AssociatedObjectTypeConstraint public bool IsEnabled { - get => - (bool) GetValue(IsEnabledProperty); - set => SetValue(IsEnabledProperty, value); + get => (bool) GetValue(IsEnabledProperty); + set => SetValue(IsEnabledProperty, ValueBoxes.BooleanBox(value)); } internal bool IsHosted From 6c632f7948dfda6413317fdd61261f97f2fd3be5 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 28 Jun 2020 23:42:29 +0800 Subject: [PATCH 74/94] close #421 --- .../Controls/Input/DatePicker.cs | 1 - .../Controls/Input/NumericUpDown.cs | 1 - .../Controls/Input/PasswordBox.cs | 76 +++++++++++++++++-- .../Controls/Input/TextBox.cs | 1 - .../Styles/Base/PasswordBoxBaseStyle.xaml | 2 +- 5 files changed, 72 insertions(+), 9 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs index a8a1e8096..79efb3048 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/DatePicker.cs @@ -8,7 +8,6 @@ namespace HandyControl.Controls { - /// [TemplatePart(Name = ElementTextBox, Type = typeof(DatePickerTextBox))] public class DatePicker : System.Windows.Controls.DatePicker, IDataInput { diff --git a/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs b/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs index 119a4d9fa..32c6c0c95 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/NumericUpDown.cs @@ -8,7 +8,6 @@ namespace HandyControl.Controls { - /// /// /// 数值选择控件 /// diff --git a/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs index 338b47210..2d411f725 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/PasswordBox.cs @@ -4,14 +4,16 @@ using System.Security; using System.Windows; using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; using System.Windows.Input; +using System.Windows.Media; using HandyControl.Data; using HandyControl.Interactivity; using HandyControl.Properties.Langs; namespace HandyControl.Controls { - /// [TemplatePart(Name = ElementPasswordBox, Type = typeof(System.Windows.Controls.PasswordBox))] [TemplatePart(Name = ElementTextBox, Type = typeof(System.Windows.Controls.TextBox))] public class PasswordBox : Control, IDataInput @@ -105,6 +107,64 @@ public bool ShowPassword set => SetValue(ShowPasswordProperty, ValueBoxes.BooleanBox(value)); } + public static readonly DependencyProperty MaxLengthProperty = + System.Windows.Controls.TextBox.MaxLengthProperty.AddOwner(typeof(PasswordBox)); + + public int MaxLength + { + get => (int)GetValue(MaxLengthProperty); + set => SetValue(MaxLengthProperty, value); + } + + public static readonly DependencyProperty SelectionBrushProperty = + TextBoxBase.SelectionBrushProperty.AddOwner(typeof(PasswordBox)); + + public Brush SelectionBrush + { + get => (Brush)GetValue(SelectionBrushProperty); + set => SetValue(SelectionBrushProperty, value); + } + +#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472) + + public static readonly DependencyProperty SelectionTextBrushProperty = + TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(PasswordBox)); + + public Brush SelectionTextBrush + { + get => (Brush)GetValue(SelectionTextBrushProperty); + set => SetValue(SelectionTextBrushProperty, value); + } + +#endif + + public static readonly DependencyProperty SelectionOpacityProperty = + TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(PasswordBox)); + + public double SelectionOpacity + { + get => (double)GetValue(SelectionOpacityProperty); + set => SetValue(SelectionOpacityProperty, value); + } + + public static readonly DependencyProperty CaretBrushProperty = + TextBoxBase.CaretBrushProperty.AddOwner(typeof(PasswordBox)); + + public Brush CaretBrush + { + get => (Brush)GetValue(CaretBrushProperty); + set => SetValue(CaretBrushProperty, value); + } + +#if !NET40 + + public static readonly DependencyProperty IsSelectionActiveProperty = + TextBoxBase.IsSelectionActiveProperty.AddOwner(typeof(PasswordBox)); + + public bool IsSelectionActive => ActualPasswordBox != null && (bool) ActualPasswordBox.GetValue(IsSelectionActiveProperty); + +#endif + public PasswordBox() => CommandBindings.Add(new CommandBinding(ControlCommands.Clear, (s, e) => Clear())); public System.Windows.Controls.PasswordBox ActualPasswordBox { get; set; } @@ -126,8 +186,7 @@ public string Password if (ActualPasswordBox == null) { _password = new SecureString(); - if (value == null) - value = string.Empty; + value ??= string.Empty; foreach (var item in value) _password.AppendChar(item); @@ -172,9 +231,9 @@ public virtual bool VerifyData() private static void OnShowPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - var ctl = (PasswordBox) d; + var ctl = (PasswordBox)d; if (!ctl.ShowEyeButton) return; - if ((bool) e.NewValue) + if ((bool)e.NewValue) { ctl._textBox.Text = ctl.ActualPasswordBox.Password; ctl._textBox.Select(string.IsNullOrEmpty(ctl._textBox.Text) ? 0 : ctl._textBox.Text.Length, 0); @@ -201,6 +260,13 @@ public override void OnApplyTemplate() if (ActualPasswordBox != null) { ActualPasswordBox.PasswordChanged += PasswordBox_PasswordChanged; + ActualPasswordBox.SetBinding(System.Windows.Controls.PasswordBox.MaxLengthProperty, new Binding(MaxLengthProperty.Name) { Source = this }); + ActualPasswordBox.SetBinding(System.Windows.Controls.PasswordBox.SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this }); +#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472) + ActualPasswordBox.SetBinding(System.Windows.Controls.PasswordBox.SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this }); +#endif + ActualPasswordBox.SetBinding(System.Windows.Controls.PasswordBox.SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this }); + ActualPasswordBox.SetBinding(System.Windows.Controls.PasswordBox.CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this }); if (_password != null) { diff --git a/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs index ee682c731..c1c5daad0 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/TextBox.cs @@ -8,7 +8,6 @@ namespace HandyControl.Controls { - /// public class TextBox : System.Windows.Controls.TextBox, IDataInput { public TextBox() diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml index d23bf6672..ad591ede1 100644 --- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml @@ -296,7 +296,7 @@ - + From 148530b91d00e22818d3e15d90bd6a731b7259cc Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Tue, 30 Jun 2020 00:09:24 +0800 Subject: [PATCH 75/94] merge pr --- .../HandyControlDemo_Net_40.csproj | 3 -- .../HandyControlDemo_Net_GE45.csproj | 3 -- .../HandyControlDemo_Code.csproj | 7 +++ .../Data/DemoInfo.json | 2 +- .../Data/Model/GeometryItemModel.cs | 13 ++++++ .../HandyControlDemo_Shared.projitems | 12 ++++- .../Properties/Langs/Lang.resx | 2 +- .../Properties/Langs/LangProvider.cs | 7 +++ .../Img/LeftMainContent/Geometry_16x.png | Bin 470 -> 0 bytes .../Resources/Themes/Styles/Style.xaml | 16 +++++++ .../UserControl/Basic/GeometryItem.xaml | 11 +++++ .../UserControl/Basic/GeometryItem.xaml.cs | 19 ++++++++ .../UserControl/Styles/GeometryDemoCtl.xaml | 23 ++++++++-- .../Styles/GeometryDemoCtl.xaml.cs | 42 +++++++++++------- 14 files changed, 132 insertions(+), 28 deletions(-) create mode 100644 src/Shared/HandyControlDemo_Shared/Data/Model/GeometryItemModel.cs delete mode 100644 src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Geometry_16x.png create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml.cs diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj index 5ce52f21e..c17c05bc9 100644 --- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj +++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj @@ -412,9 +412,6 @@ Resources\Img\LeftMainContent\MainMenuControl_16x.png - - Resources\Img\LeftMainContent\Geometry_16x.png - Resources\fabric-icons.ttf diff --git a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj index b3896d28d..0a009190d 100644 --- a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj +++ b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj @@ -411,9 +411,6 @@ Resources\Img\LeftMainContent\MainMenuControl_16x.png - - - Resources\Img\LeftMainContent\Geometry_16x.png Resources\fabric-icons.ttf diff --git a/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj b/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj index dbbb46a42..6181daab9 100644 --- a/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj +++ b/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj @@ -273,6 +273,9 @@ UserControl\Styles\FrameDemoCtl.xaml + + UserControl\Styles\GeometryDemoCtl.xaml + UserControl\Styles\GroupBoxDemoCtl.xaml @@ -706,6 +709,10 @@ UserControl\Styles\FrameDemoCtl.xaml.cs FrameDemoCtl.xaml + + UserControl\Styles\GeometryDemoCtl.xaml.cs + GeometryDemoCtl.xaml + UserControl\Styles\GroupBoxDemoCtl.xaml.cs GroupBoxDemoCtl.xaml diff --git a/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json b/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json index 613c2d5a0..c1e8e21ed 100644 --- a/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json +++ b/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json @@ -33,7 +33,7 @@ [ "Label", "LabelDemoCtl", "Label_16x", "" ], [ "Frame", "FrameDemoCtl", "frame_16xLG", "1" ], [ "Window", "NativeWindowDemoCtl", "WindowsForm_16x", "1" ], - [ "Geometry", "GeometryDemoCtl", "Geometry_16x", "1" ] + [ "Geometry", "GeometryDemoCtl", "Path_16x", "1" ] ] }, { diff --git a/src/Shared/HandyControlDemo_Shared/Data/Model/GeometryItemModel.cs b/src/Shared/HandyControlDemo_Shared/Data/Model/GeometryItemModel.cs new file mode 100644 index 000000000..dca49b44a --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/Data/Model/GeometryItemModel.cs @@ -0,0 +1,13 @@ +using System.Windows.Media; + +namespace HandyControlDemo.Data +{ + public class GeometryItemModel + { + public Geometry Data { get; set; } + + public string Key { get; set; } + + public bool Line { get; set; } + } +} \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems index f32f6c4b7..1ae0db8cf 100644 --- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems +++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems @@ -19,6 +19,7 @@ + @@ -45,6 +46,9 @@ ChatBox.xaml + + GeometryItem.xaml + InteractiveDialog.xaml @@ -316,7 +320,7 @@ FrameDemoCtl.xaml - + GeometryDemoCtl.xaml @@ -506,6 +510,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -866,7 +874,7 @@ Designer MSBuild:Compile - + Designer MSBuild:Compile diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx index fc08c26ab..34a270a9e 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx @@ -757,6 +757,6 @@ 图片选择器 - Geometry + 几何形状 \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs index 41dba43cc..93ca4c9cb 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs @@ -593,7 +593,11 @@ private void UpdateLangs() /// public string Frame => Lang.Frame; + /// + /// 查找类似 几何形状 的本地化字符串。 + /// public string Geometry => Lang.Geometry; + /// /// 查找类似 Gif图片 的本地化字符串。 /// @@ -1668,6 +1672,9 @@ public class LangKeys /// public static string Frame = nameof(Frame); + /// + /// 查找类似 几何形状 的本地化字符串。 + /// public static string Geometry = nameof(Geometry); /// diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Geometry_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Geometry_16x.png deleted file mode 100644 index 4075b3dc4cdb21c837e16a81a642b11cd37770ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)9j7TypdAgD%_3NRiIohA2T$7hrma~j%IYKT9%ceJ|ToyBTnJNu~=-h zR4QF*KTg{VQmNEBoVe$Cvk2US$8=qvtJmv^WHPA)DScau00a}_2JPu$vG`)!_B;61 zb=@F7gW#s(Q1i_f;O0dkM2^lO(IqzQi9G5!PKCII=M=Zm>}vpS4uS&^mcSYIp!V}X zK1h9^{EQgD`*F2gf~NT|C=?1=$O(o+eDh?rT8*-YJ@PmF5w;ShacQ4`>~yQEgFR+~2r;|_sma+_Bk5L>LHfMT$y zEH4=ck09VMybNx$mQQHzhQr|%20!phBobL|?)8k-kEFckfxi$x0lNT?b9L2oy8r+H M07*qoM6N<$f?;ITrT_o{ diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml index d17b720f9..c526ea381 100644 --- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml +++ b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml @@ -187,4 +187,20 @@ + + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml new file mode 100644 index 000000000..0e7eb7449 --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml.cs new file mode 100644 index 000000000..63eb33430 --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Basic/GeometryItem.xaml.cs @@ -0,0 +1,19 @@ +using System.Windows; +using HandyControlDemo.Data; + +namespace HandyControlDemo.UserControl +{ + public partial class GeometryItem + { + public GeometryItem() => InitializeComponent(); + + public static readonly DependencyProperty InfoProperty = DependencyProperty.Register( + "Info", typeof(GeometryItemModel), typeof(GeometryItem), new PropertyMetadata(default(GeometryItemModel))); + + public GeometryItemModel Info + { + get => (GeometryItemModel) GetValue(InfoProperty); + set => SetValue(InfoProperty, value); + } + } +} \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml index 88cf83195..28168ea8e 100644 --- a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml @@ -2,10 +2,27 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:hc="https://handyorg.github.io/handycontrol" - xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs" - xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension" + xmlns:userControl="clr-namespace:HandyControlDemo.UserControl" + DataContext="{Binding RelativeSource={RelativeSource Self}}" Background="{DynamicResource RegionBrush}"> - + + + + + + + + + + + + + + + + + + diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs index d2af7c221..a5db33700 100644 --- a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/GeometryDemoCtl.xaml.cs @@ -1,15 +1,24 @@ - -using HandyControl.Data; -using System; -using System.Windows; -using System.Windows.Controls; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; using System.Windows.Media; -using System.Windows.Shapes; +using HandyControl.Themes; +using HandyControl.Tools; +using HandyControlDemo.Data; namespace HandyControlDemo.UserControl { public partial class GeometryDemoCtl { + private readonly HashSet _lineSet = new HashSet + { + "CheckedGeometry" + }; + + public ObservableCollection GeometryItems { get; set; } = + new ObservableCollection(); + public GeometryDemoCtl() { InitializeComponent(); @@ -18,16 +27,19 @@ public GeometryDemoCtl() public void GenerateGeometries() { - ResourceDictionary dictionary = new ResourceDictionary(); - dictionary.Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Basic/Geometries.xaml", UriKind.Absolute); - foreach (var item in dictionary.Keys) + var uri = new Uri("pack://application:,,,/HandyControl;component/Themes/Basic/Geometries.xaml", UriKind.Absolute); + var dic = SharedResourceDictionary.SharedDictionaries[uri]; + var keys = dic.Keys.OfType().OrderBy(item => item); + + foreach (var key in keys) { - StackPanel stack = new StackPanel { Margin = new Thickness(10) }; - TextBlock text = new TextBlock { Text = item.ToString(), HorizontalAlignment = HorizontalAlignment.Stretch }; - Path path = new Path { Width = 26, Height = 26, Data = TryFindResource(item.ToString()) as Geometry, Fill = TryFindResource(ResourceToken.PrimaryTextBrush) as Brush }; - stack.Children.Add(path); - stack.Children.Add(text); - panel.Children.Add(stack); + var data = ResourceHelper.GetResource(key); + GeometryItems.Add(new GeometryItemModel + { + Key = key, + Data = data, + Line = _lineSet.Contains(key) + }); } } } From 9b46a1c2e3984552b38ffcd360490fe662004772 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 1 Jul 2020 21:37:31 +0800 Subject: [PATCH 76/94] add ImagePropertyEditor --- .../Data/Model/PropertyGridDemoModel.cs | 3 + .../Controls/PropertyGridDemoCtl.xaml | 3 + .../Controls/Other/Gravatar.cs | 10 ++- .../Editors/ImagePropertyEditor.cs | 63 +++++++++++++++++++ .../Controls/PropertyGrid/PropertyResolver.cs | 8 ++- .../HandyControl_Shared.projitems | 1 + 6 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ImagePropertyEditor.cs diff --git a/src/Shared/HandyControlDemo_Shared/Data/Model/PropertyGridDemoModel.cs b/src/Shared/HandyControlDemo_Shared/Data/Model/PropertyGridDemoModel.cs index 18adf40a6..ebc634a56 100644 --- a/src/Shared/HandyControlDemo_Shared/Data/Model/PropertyGridDemoModel.cs +++ b/src/Shared/HandyControlDemo_Shared/Data/Model/PropertyGridDemoModel.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Windows; +using System.Windows.Media; namespace HandyControlDemo.Data { @@ -20,6 +21,8 @@ public class PropertyGridDemoModel public HorizontalAlignment HorizontalAlignment { get; set; } public VerticalAlignment VerticalAlignment { get; set; } + + public ImageSource ImageSource { get; set; } } public enum Gender diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml index 7a939aa50..f803c23e4 100644 --- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml @@ -18,6 +18,9 @@ + + + diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Gravatar.cs b/src/Shared/HandyControl_Shared/Controls/Other/Gravatar.cs index 1ba9da896..e0ce3497a 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Gravatar.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Gravatar.cs @@ -32,14 +32,20 @@ public string Id 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); + var v = (ImageSource) e.NewValue; + + ctl.Background = v != null + ? new ImageBrush(v) + { + Stretch = Stretch.UniformToFill + } + : ResourceHelper.GetResource("SecondaryRegionBrush"); } public ImageSource Source diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ImagePropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ImagePropertyEditor.cs new file mode 100644 index 000000000..bf463959d --- /dev/null +++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ImagePropertyEditor.cs @@ -0,0 +1,63 @@ +using System; +using System.Windows; +using System.Windows.Data; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace HandyControl.Controls +{ + public class ImagePropertyEditor : PropertyEditorBase + { + public override FrameworkElement CreateElement(PropertyItem propertyItem) + { + var imageSelector = new ImageSelector + { + IsEnabled = !propertyItem.IsReadOnly, + Width = 50, + Height = 50, + HorizontalAlignment = HorizontalAlignment.Left + }; + + BindingOperations.SetBinding(this, UriProperty, new Binding(ImageSelector.UriProperty.Name) + { + Source = imageSelector, + Mode = BindingMode.OneWay + }); + + return imageSelector; + } + + internal static readonly DependencyProperty UriProperty = DependencyProperty.Register( + "Uri", typeof(Uri), typeof(ImagePropertyEditor), new PropertyMetadata(default(Uri), OnUriChangedCallback)); + + private static void OnUriChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) => + ((ImagePropertyEditor)d).Source = e.NewValue is Uri uri ? BitmapFrame.Create(uri) : null; + + internal Uri Uri + { + get => (Uri) GetValue(UriProperty); + set => SetValue(UriProperty, value); + } + + public static readonly DependencyProperty SourceProperty = DependencyProperty.Register( + "Source", typeof(ImageSource), typeof(ImagePropertyEditor), new PropertyMetadata(default(ImageSource))); + + public ImageSource Source + { + get => (ImageSource) GetValue(SourceProperty); + set => SetValue(SourceProperty, value); + } + + public override void CreateBinding(PropertyItem propertyItem, DependencyObject element) + => BindingOperations.SetBinding(this, GetDependencyProperty(), + new Binding($"({propertyItem.PropertyName})") + { + Source = propertyItem.Value, + Mode = GetBindingMode(propertyItem), + UpdateSourceTrigger = GetUpdateSourceTrigger(propertyItem), + Converter = GetConverter(propertyItem) + }); + + public override DependencyProperty GetDependencyProperty() => SourceProperty; + } +} \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyResolver.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyResolver.cs index 9d51c4ff8..f456bcf81 100644 --- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyResolver.cs +++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/PropertyResolver.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using System.Linq; using System.Windows; +using System.Windows.Media; using HandyControl.Properties.Langs; namespace HandyControl.Controls @@ -25,7 +26,8 @@ public class PropertyResolver [typeof(bool)] = EditorTypeCode.Switch, [typeof(DateTime)] = EditorTypeCode.DateTime, [typeof(HorizontalAlignment)] = EditorTypeCode.HorizontalAlignment, - [typeof(VerticalAlignment)] = EditorTypeCode.VerticalAlignment + [typeof(VerticalAlignment)] = EditorTypeCode.VerticalAlignment, + [typeof(ImageSource)] = EditorTypeCode.ImageSource }; public string ResolveCategory(PropertyDescriptor propertyDescriptor) @@ -93,6 +95,7 @@ public virtual PropertyEditorBase CreateDefaultEditor(Type type) => EditorTypeCode.DateTime => new DateTimePropertyEditor(), EditorTypeCode.HorizontalAlignment => new HorizontalAlignmentPropertyEditor(), EditorTypeCode.VerticalAlignment => new VerticalAlignmentPropertyEditor(), + EditorTypeCode.ImageSource => new ImagePropertyEditor(), _ => new ReadOnlyTextPropertyEditor() } : type.IsSubclassOf(typeof(Enum)) @@ -117,7 +120,8 @@ private enum EditorTypeCode Switch, DateTime, HorizontalAlignment, - VerticalAlignment + VerticalAlignment, + ImageSource } } } \ 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 cc7d116a2..e38ea1293 100644 --- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems +++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems @@ -42,6 +42,7 @@ + From 0ffaf7c1e2635f9512abf4ecef7ef63af248a75d Mon Sep 17 00:00:00 2001 From: ImgBotApp Date: Thu, 2 Jul 2020 05:37:57 +0000 Subject: [PATCH 77/94] [ImgBot] Optimize images *Total -- 270.82kb -> 116.14kb (57.11%) /doc/themes/next/source/images/apple-touch-icon-HandyOrg.png -- 127.02kb -> 2.65kb (97.91%) /doc/themes/next/source/images/favicon-32x32-HandyOrg.png -- 4.12kb -> 0.79kb (80.84%) /src/Shared/HandyControlDemo_Shared/Resources/Img/chrome_dragon.png -- 1.88kb -> 0.49kb (73.84%) /doc/themes/next/source/images/favicon-16x16-HandyOrg.png -- 1.10kb -> 0.50kb (54.47%) /doc/themes/next/source/images/avatar.gif -- 2.86kb -> 1.74kb (39%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/right.png -- 1.22kb -> 0.78kb (36.44%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/top.png -- 1.22kb -> 0.78kb (36.36%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/left.png -- 1.22kb -> 0.78kb (36.34%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottom.png -- 1.23kb -> 0.78kb (36.28%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/lefttop.png -- 1.26kb -> 0.81kb (35.84%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/topleft.png -- 1.26kb -> 0.81kb (35.81%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/righttop.png -- 1.26kb -> 0.81kb (35.76%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottomleft.png -- 1.26kb -> 0.81kb (35.7%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornertopright.png -- 1.29kb -> 0.83kb (35.58%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottomright.png -- 1.27kb -> 0.82kb (35.52%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/leftbottom.png -- 1.27kb -> 0.82kb (35.47%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/topright.png -- 1.26kb -> 0.82kb (35.39%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornerbottomleft.png -- 1.28kb -> 0.83kb (35.39%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/rightbottom.png -- 1.26kb -> 0.81kb (35.38%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornertopleft.png -- 1.26kb -> 0.82kb (35.27%) /src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornerbottomright.png -- 1.28kb -> 0.83kb (35.22%) /Installers/VS2019/HandyControl_VS2019/icon_100_100.png -- 4.97kb -> 3.49kb (29.78%) /doc/themes/next/source/images/cc-by.svg -- 8.08kb -> 5.99kb (25.91%) /doc/themes/next/source/images/quote-r.svg -- 0.85kb -> 0.64kb (25%) /doc/themes/next/source/images/quote-l.svg -- 0.86kb -> 0.65kb (24.8%) /doc/themes/next/source/images/cc-by-nc.svg -- 9.45kb -> 7.35kb (22.21%) /doc/themes/next/source/images/cc-by-nd.svg -- 9.16kb -> 7.17kb (21.76%) /doc/themes/next/source/images/cc-by-sa.svg -- 10.02kb -> 7.92kb (20.93%) /doc/themes/next/source/images/cc-by-nc-nd.svg -- 10.67kb -> 8.57kb (19.69%) /doc/themes/next/source/images/cc-by-nc-sa.svg -- 11.39kb -> 9.29kb (18.45%) /Installers/VS2019/HandyControl_VS2019/icon_300_300.png -- 12.59kb -> 10.82kb (14.05%) /doc/themes/next/source/images/cc-zero.svg -- 6.07kb -> 5.61kb (7.64%) /doc/themes/next/source/images/searchicon.png -- 0.75kb -> 0.74kb (0.91%) /src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/4.gif -- 2.21kb -> 2.19kb (0.71%) /doc/themes/next/source/images/algolia_logo.svg -- 4.30kb -> 4.27kb (0.61%) /src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/7.gif -- 2.55kb -> 2.54kb (0.46%) /src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/3.gif -- 2.11kb -> 2.10kb (0.14%) /src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/2.gif -- 2.29kb -> 2.29kb (0.09%) /doc/themes/next/source/images/logo.svg -- 1.15kb -> 1.15kb (0.09%) /src/Shared/HandyControlDemo_Shared/Resources/Img/1.jpg -- 14.29kb -> 14.28kb (0.04%) Signed-off-by: ImgBotApp --- .../HandyControl_VS2019/icon_100_100.png | Bin 5091 -> 3575 bytes .../HandyControl_VS2019/icon_300_300.png | Bin 12895 -> 11083 bytes .../next/source/images/algolia_logo.svg | 10 +- .../images/apple-touch-icon-HandyOrg.png | Bin 130064 -> 2717 bytes doc/themes/next/source/images/avatar.gif | Bin 2926 -> 1785 bytes doc/themes/next/source/images/cc-by-nc-nd.svg | 122 +----------------- doc/themes/next/source/images/cc-by-nc-sa.svg | 122 +----------------- doc/themes/next/source/images/cc-by-nc.svg | 122 +----------------- doc/themes/next/source/images/cc-by-nd.svg | 118 +---------------- doc/themes/next/source/images/cc-by-sa.svg | 122 +----------------- doc/themes/next/source/images/cc-by.svg | 122 +----------------- doc/themes/next/source/images/cc-zero.svg | 73 +---------- .../source/images/favicon-16x16-HandyOrg.png | Bin 1129 -> 514 bytes .../source/images/favicon-32x32-HandyOrg.png | Bin 4217 -> 808 bytes doc/themes/next/source/images/logo.svg | 3 +- doc/themes/next/source/images/quote-l.svg | 14 +- doc/themes/next/source/images/quote-r.svg | 13 +- doc/themes/next/source/images/searchicon.png | Bin 766 -> 759 bytes .../Resources/Img/1.jpg | Bin 14631 -> 14625 bytes .../Resources/Img/QQ/2.gif | Bin 2345 -> 2343 bytes .../Resources/Img/QQ/3.gif | Bin 2157 -> 2154 bytes .../Resources/Img/QQ/4.gif | Bin 2258 -> 2242 bytes .../Resources/Img/QQ/7.gif | Bin 2608 -> 2596 bytes .../Resources/Img/chrome_dragon.png | Bin 1923 -> 503 bytes .../Resources/Images/GlowWindow/bottom.png | Bin 1257 -> 801 bytes .../Images/GlowWindow/bottomleft.png | Bin 1294 -> 832 bytes .../Images/GlowWindow/bottomright.png | Bin 1298 -> 837 bytes .../Images/GlowWindow/cornerbottomleft.png | Bin 1311 -> 847 bytes .../Images/GlowWindow/cornerbottomright.png | Bin 1306 -> 846 bytes .../Images/GlowWindow/cornertopleft.png | Bin 1293 -> 837 bytes .../Images/GlowWindow/cornertopright.png | Bin 1318 -> 849 bytes .../Resources/Images/GlowWindow/left.png | Bin 1252 -> 797 bytes .../Images/GlowWindow/leftbottom.png | Bin 1297 -> 837 bytes .../Resources/Images/GlowWindow/lefttop.png | Bin 1292 -> 829 bytes .../Resources/Images/GlowWindow/right.png | Bin 1254 -> 797 bytes .../Images/GlowWindow/rightbottom.png | Bin 1289 -> 833 bytes .../Resources/Images/GlowWindow/righttop.png | Bin 1292 -> 830 bytes .../Resources/Images/GlowWindow/top.png | Bin 1254 -> 798 bytes .../Resources/Images/GlowWindow/topleft.png | Bin 1290 -> 828 bytes .../Resources/Images/GlowWindow/topright.png | Bin 1294 -> 836 bytes 40 files changed, 11 insertions(+), 830 deletions(-) diff --git a/Installers/VS2019/HandyControl_VS2019/icon_100_100.png b/Installers/VS2019/HandyControl_VS2019/icon_100_100.png index df0bb78247910e423e7d3fe1f95086376e91c585..f405be8ca70b8fd3a9fcf14406385bb45b10fad7 100644 GIT binary patch delta 3554 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 literal 5091 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 diff --git a/Installers/VS2019/HandyControl_VS2019/icon_300_300.png b/Installers/VS2019/HandyControl_VS2019/icon_300_300.png index cb318d980014edb6d86de07dcdefd4cd738ffc16..30099ff7398460dd9ac8e25497faacd7c4c7ef2f 100644 GIT binary patch literal 11083 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 literal 12895 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 B6uJNa diff --git a/doc/themes/next/source/images/algolia_logo.svg b/doc/themes/next/source/images/algolia_logo.svg index 470242341..1299c4ce0 100644 --- a/doc/themes/next/source/images/algolia_logo.svg +++ b/doc/themes/next/source/images/algolia_logo.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/apple-touch-icon-HandyOrg.png b/doc/themes/next/source/images/apple-touch-icon-HandyOrg.png index efe9354676c0f6114136ebfaf3f94dcf1fa77a98..d1474481359274f6198ad5a300e65ec6de2a4946 100644 GIT binary patch literal 2717 zcmZ`)eK=HU8$U?XXc3cak&(!5k~1HY(U?qQhh-!mn|v(d7?QqBiZW@9G`nKUVzgq$ zsJ5+@j7@Bk)rT@+TAMd-sFaQ^#%Qt|GkKpgqxZVrKi=zl&U5bPKKJi;|L)&8bB!=K zh;3@J%mjiUQ-42J2)H+3*8(H3n-HeJ4$b5GaC{)>O3^}1yfHZ2C-{YMASi1U1my@I zXd0w)Pzc%&L(pGw5JVF}koBI5<}Di_$ne+Tz%XA>FrGwFC6OnvMFIO*;#yryev|B` zhb*)gTm*AKT%sCr4v|P7DYZU>if+z*F6k zG?Azuhx|5qZWa}n3KS}J#2+4gc+q1%Ot^jKzpP z#%ux3&rPAP(a{2{L75WK$p#%UHcSQ(16;)dJ&7*BV(c@}>%^Ywmd;Oo$2l=r!Q6CQ z(j?G;37$i#z)}C|b@PI^02~AF7eK}n$&<;{Nd%tcl4f%tRU-Da%;s#I1x*onHrxfw z3xt8PcVPC!wWyaz@AZ7W-AkE(bs5q5KRY`czB-BsKHQhQkf2b=Zs*mn=>4>Be$8zVeom?f<&w-#>iyL|Q#4ep*%eZ1}}#QQ2teUnQ@-1IPSTer(p%roWj!8>i`B zG*83z9`lUd=TqI*E?r?6ya;bfj4)x?SU&;-8*C3?vqsu>Mq)p8{2sq;=@4Xg3%d+T zT+D1h636rB_~KsR42_*UQLF5W5M(^$&+-X7*grP#J~k};)AqYH5fKCOQAM4)~ra_ ze=XkZonOKoLY8)K>8cZVXCfM915< z6V%B!MKPDHH|zKDO2&ayEgAGmY(8kwN!Jz-KQw6L+5gLnD zO4AR&Ea(o;t$cbh@CB!)+WEb_{L=jF{BAPo+i%B5y_{p6BLkoLY=2=p^J*O0|xB@?+v@k1?tD6S>ACY|b$JtY$F72U9@4#@1; zzK%h|mvS5=uWnZ0X^Kt$XcNq}V`P1@=C^!2y^7e9gKz1vLl60*zA%@>$P(`3EoDr5 zM`SSYExmRq&JSHIk`)lOVj=pn?#&9zEMxh$lvwp@(eQIN_hx4q$qS( ztePg0RTAlDrN&pY)$>J^&BH0hkMUhgIJoZzGev?ylk}@9 zDe)*$1j;i+q4$dTpOn&rn93gE;04>30Ox7EWtNBhaeLADyw0h9>*WswgShnP`>U%Q zCFyZpe7@R%puojH4t3;x-hPr~)NF&#UN91-l2)y=pxczbbCQ_1S47NIUySdv;Pd9K z@!H`qz0{IM9I+i{<4BU!xFA=?^tOnp3L)xX+5G8^a5MQc{UJ*o zpg|1@3O5(_-|H;2CX8m85ZziL-CTa0e}brO7NSeJ{3FZDW2WocV&O%=h%vpneeVcE*PpCe^z`4 z@+&3QslG>w?(^fAZecm&UAdK)t>{)IC!8g(eALm#=%TPkxq>^fcPgY%b{_7`FIFwq zCGQ+0$ddczXCc$rO4AxipSZ%(7`?{dfEv>j6D}=`hdq-H9p&c?vkjgw_zu-&Ia^1H z!^B7?d12(S*R0%E!8EHF(KzM&`DMK5$k*MI%g#OJa=4j;!s{=jmyQ>d;tmf8cUVb~ zUCdPP_`&sx)`sIvk>^cZ=}r%Zo_@$0G;at@+dDkNS-mNsoO;#2@8y@HeFwWVgO1LZ zgPbDogbk@%TQVZ2y~-s=s3V%D$ko09qqQ2B?x=SM`i$zWilfrUPkT7m2-HTsd^eBv z5gGM6nw+A%@|IeiU!7rjBz$1o%4g!`4Y?UTW~Yg1<=m_CX!qn7A?%fX++|Ha^>&oh zIozt7$v^PEHd#r!_onGaNdK+8hfE$kVv-U)5OX9Zzx;|L{nBV#+Qw@xzdtH!w0dUJ zdZq9KQ8f9r+GbFU{XaPId?R>?@jQfQk!9d?0X8VoDn hF8K3*0BO4uQ<5_OKcKR+${{RXY3E}_% literal 130064 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 diff --git a/doc/themes/next/source/images/avatar.gif b/doc/themes/next/source/images/avatar.gif index 989902574302a6378709709f7baab789b242ebbb..3b5d744b17ae541e331e9296640f0418d4e7c821 100644 GIT binary patch delta 25 hcmaDS_LG;}-P6s&Jn=fib%t*nxtka_GqL5c0swrH2+IHf delta 1177 zcmey#`%aA8-P6s&GVwaYb%tjfxtkd475{Tb_y#DrB$gxsX&d{Bg2d$P)DnfH)bz|e zTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9IEy7UZUuBq~(o z=HwMyRoE&ersOB3S^?Q0VSOb9u#%E&TO~)3gaXJ;=lr77dIeKGQ{7|(LlXsaOFctV zLlX-_9R(u;Lt}jdV|_zoT|*-)14}DIQw1nc0$Nv;l4cd;;s&)0$g@?-C@Cqh($_C9 zFV`zK*2^zS*Eh7ZwA42+(l;{F1**_3uFNY*tkBIXR)(42l3JWxRG(Q;l9`{U05UQ$ zDZjMDRte}(3-TFQb#X~hD#9IDRTqa; z7NqJ2r55Lx7A2NJFPuMj_RQ&1Cr=zdcJ#>MLkAD+-?w+q?p-@~Y~QwZ%jQiRH>_W`cFpQl zD_1OEwsgtjMGF_qpEq~T>{&BsOrJJ&%H&BCC-nFA_H=i3cC@#(wlp_2Hq_VE)>Kzj zR+N{Omedy)6&B>@<>q8(WoD$OrKTh&B__nj#l}QOMMi{&g@yzN1qS&0`TBT!d3w0J zxw<$zIXc+e+1glJSz4HznVJ|I85-#8>FQ`}X= - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/cc-by-nc-sa.svg b/doc/themes/next/source/images/cc-by-nc-sa.svg index bf6bc26f5..d6853214e 100644 --- a/doc/themes/next/source/images/cc-by-nc-sa.svg +++ b/doc/themes/next/source/images/cc-by-nc-sa.svg @@ -1,121 +1 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/cc-by-nc.svg b/doc/themes/next/source/images/cc-by-nc.svg index 36973490a..64e023074 100644 --- a/doc/themes/next/source/images/cc-by-nc.svg +++ b/doc/themes/next/source/images/cc-by-nc.svg @@ -1,121 +1 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/cc-by-nd.svg b/doc/themes/next/source/images/cc-by-nd.svg index 934c61e15..a56f8d3ab 100644 --- a/doc/themes/next/source/images/cc-by-nd.svg +++ b/doc/themes/next/source/images/cc-by-nd.svg @@ -1,117 +1 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/cc-by-sa.svg b/doc/themes/next/source/images/cc-by-sa.svg index 463276a8c..47d75790b 100644 --- a/doc/themes/next/source/images/cc-by-sa.svg +++ b/doc/themes/next/source/images/cc-by-sa.svg @@ -1,121 +1 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/cc-by.svg b/doc/themes/next/source/images/cc-by.svg index 4bccd14f6..5b1db2b55 100644 --- a/doc/themes/next/source/images/cc-by.svg +++ b/doc/themes/next/source/images/cc-by.svg @@ -1,121 +1 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/cc-zero.svg b/doc/themes/next/source/images/cc-zero.svg index 0f866392f..0c08ee659 100644 --- a/doc/themes/next/source/images/cc-zero.svg +++ b/doc/themes/next/source/images/cc-zero.svg @@ -1,72 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/favicon-16x16-HandyOrg.png b/doc/themes/next/source/images/favicon-16x16-HandyOrg.png index beabd0e8cd8015793d6b37da15d0c528076da19e..804b2f4d43021839a984038bbc92c8dd8bdfe8ff 100644 GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>_e zNPbK;c%ND9YxqAj6vzds`Tzf(Z4uB42Dy?TzhH(n`=r;J#{FBUbVy{&qQ!rf2t8ogEWC;L ztF=}S^QrIJd_b2nFeZ7syU4Th3hV`PI14-?iy0XBj({-ZRBb+KpdfpRr>`sf6Luz6 zRnv!y4I6+$37#&FArhBs&wKJUDDXI3Tx9X6#e)CN{~19U0TDmK&t_j*a-c+jS+;e; z5}D&V`W#*>-tcAdA98fQaO^_k3txR6hrbOnzOR_St!O%V_)UW10|mh_{@Zm5bFTXe z*op7|&(NMP<`F;Xni$Y7)e_f;l9a@fRIB8oR3OD*WME{VYhbQxU=(6tYGrJ0Won>p nU|?ln@cuK$RTK@m`6-!cmAEy`Tel$-sDZ)L)z4*}Q$iB}8lte1 literal 1129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fA0|Se+ zr;B5Vg&?B<%lqGqAJUB002KxUF*#r@6Hphqnn4x@gA70h`~NWgl>rK@Lly+F8UOz? z`_K449?1NUEQewMkE5fT~gDuxe*uK=A?& zHF$-w+VU~kQs_VP&vVE+`K9<&7#j}!K^6nCu^Pb0{EG<~+4AU$!F)zwIzUPZ*uB8Y zjHCqB7@)~0awrBc{%7C>DgXZi(||XReuL#ujl&E?k53sU)=VrvB+wPIvV5!m9~ufW r8AT418&RBuu8|NQ!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10;$DDHh%1nOmtyoG4Ty|C zLdbNZ_i097(~N;4K=F_1M*nkF-lrM@+5a0H-e#Es8SgVpKBk+1bpaI{zXNj9jNYc| zgG@*<`p>}dG1d5Uy5au@29O~@MrbII`~)@-qzh5HvWRbMW9N`3;A1&K_iI*JZT!y|H0>PD1-*?c_Hmr{>x7 zsaFY}ds_AT@1}in>yu1t_uDgY9l!m{$?Po1r>Z5c5hW>!C8<`)MX5lF!N|bKK-a)r z*T5*mz|_jv+{)BI+rYrez~KF7j;kmda`RI%(<*Umn73|2CQt)|r>mdKI;Vst01QMq AOaK4? literal 4217 zcmc&%O=uHA6rMNJBuybnMGu-Pv{1d|Ahh%#qE?C8T#AT_-h^n8LZRAQK?xoNy^4aO z2!aO@Jb3aV2o446+Oa^9W-ru}$-+Qw&d;Qq> z(MV6cM+gx~jU|uc*iXGXh|ihX*%chZ(_?35gowVT4!07~J|TJ&spP>Er^C?S`*{(5 zpBvgIrMQpEJF&O3&0Cg8!_vf17QMFHdHF>lD?8_$Fz8(bprefi075(y0tPWx`vJtO zW{_$jE(HX{(e4!Le{r*+8bBN8hE7wlJMW*9R8I|tmR2J#0AR1Pc8RNF@n{e-FAGHd znjG1o3dIjN-Bgk~JlF_WAXh6kaPw16N_DM5HyCxrImtKQe!GCfy#~4^HVZ&l8naMs zMQ{zNO`j~0!KQ%+Q1#vHtPX&ip(g;km~U7wj3d^D1pr107$@r@^k$EOhK&PQU$s05 zO35x(Qp?x@U=^`8Yy^a|7oiErk)Atgj{t_zQLoJ80T`BAOAA>!wkLkr0T^qTWS7a{ z=;+;dA5q@T>D0-5)qrKsXWin>Fnra3RGz}=h{y6%gn9!-Xrcgq8+xjNpBHxbby@0> z>7$m8E#{8Elex889yezJfDwT}UWK(12e<{lZjUNXZp!#=C|gm4e!c_7r&udKpY(R> z&zh&gb%}ugU7%aK3zYj=AphoD7y+|l{sYaY0JQxsm(Q^W3*ifdjQgMD>xKoOEuGdG zQPl~AT*E7sI&TYn8@5XT diff --git a/doc/themes/next/source/images/logo.svg b/doc/themes/next/source/images/logo.svg index ad0fa686a..c69a82647 100644 --- a/doc/themes/next/source/images/logo.svg +++ b/doc/themes/next/source/images/logo.svg @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/doc/themes/next/source/images/quote-l.svg b/doc/themes/next/source/images/quote-l.svg index 6dd94a4a0..95c2f2ceb 100644 --- a/doc/themes/next/source/images/quote-l.svg +++ b/doc/themes/next/source/images/quote-l.svg @@ -1,13 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/quote-r.svg b/doc/themes/next/source/images/quote-r.svg index 312b64d71..810d935d1 100644 --- a/doc/themes/next/source/images/quote-r.svg +++ b/doc/themes/next/source/images/quote-r.svg @@ -1,12 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/doc/themes/next/source/images/searchicon.png b/doc/themes/next/source/images/searchicon.png index 14a16cad3e0722952bae78768f4ef457dbfb4c0d..b833b567d109fc9087d225ccf34258685981a20d 100644 GIT binary patch delta 711 zcmeyz`ki%xWIYQ51H(kiG)*AIlJ4m1$iT3%pZiZDE0C{{>=ES4z)+>ez|hdb!0-zw z)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15==?n?k)`f+xyS#2lCiUJbhi+pRhBrs+v`- zO0Z&JV7%q&;uvCadg_$@-ZG9N$CnEniD2DgP*oo)<*myic%*oJ$D_Grlg{0U=<0O} zy4~@E+vJ004vVA85&HwrT)0~~)F%oA7_jK<`79JEX!%8^yZYYSH|O;9*591_{qLTc zmHGFAH4a}|Gx6}zqf1XPZZ7#PBKP@U$_;n+H+{NRiyl^q={)F;{j4dImvC9R_Cb$~ z{m*2U8Jx}8^}FwF_L-#iDsxG%$^BLHj24?!Y|ye;sxMIAll?Jn(uc#PG9AY5vrP^8 z{<|8!Z*SM|4y$(RHqtD($g|!-M*HE{C5`fnq|6@*dxrS4tofnyVHfA_43p<3u7~#8 zEV`JI`$4mJVu8AEE-p|8w)ZS3A_7_^svrqcb6SOR@5f(^J-`=&s>f zwNpJg`(&a2eYuaVaaJ!A8d%Tu&f9lrqwl0l=PwSOLjKccPWo<^t9#D<{*w<;CqKuk zq)IoeJrm5+uz!Yv^TEwQ3iXmLqFpS>YbL9DPm7%);3&@GBe@<6LkYT=NjsV>Z|cZh<{vRy+%w1-l%6_Y=GZ-#`|~ z1B=CP;-DQAf}=r%TO33ufil4rFa*Z=pLt*fSGZ05r0$p7HV z-_lsSxjk`h`%Z%UV8pb?O1x3z2f=?j2T`Z!06V~EEw>OH@G@5=SgqwIz<#dCZ=^tz z$n6D-Ov0OlyOqK2S;6BBc&v?MV692GNSNt@6)wJmOCncd5?-o}-+`A___zapY2)R7 z3&YUAzm@+XTq(A1$RvM!R~u&q zDfA)=z!s6~H3@gKXxLE|QoI=~(Z(-8ze)HJxG4Nf z7#%*3RS(z-F7h+W&)&suB^9-%Kl-?`PY%!G{OlE(5Vl((wXzQ`hO0Zxl&~%?4fjO( zCzHbVC6Ulh$3w6gyvnq&Z8%j#&eM4RdhNdg3;@{$i>-2VU(x^o002ovPDHLkV1jbU BRl@)P diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/1.jpg b/src/Shared/HandyControlDemo_Shared/Resources/Img/1.jpg index 7bbb93a8758dcbfa56a3842cd8ad55f59bc292e4..926fef5b5a4bea19a34497025203906176ef0d5e 100644 GIT binary patch delta 14405 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 diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/2.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/2.gif index cd5606d2802f321392c22e14ea5c8e6cb1afeb65..e3b4fd7e1784f17899e78c918cb54b92fd7068ca 100644 GIT binary patch literal 2343 zcmY+Fdpy(oAIHDj?7Oeo>|$n{Et|`Xu<<)Obom`dnuQ}~Kj%a!la@WP}q`TBlrlM?nO8OI)ni_2 z_)Mo<+h!VI391JoPl)j|9knm(L;9QR64rp~QMZLBs{1{yi|^ko^!}kr5uc4*|KZL* z)I)aak+riInd;$R76+v>S$aiMO!Hp*>!B#%{|-m3<*`=c?d0gW*2YSJLcmv?1r1FI zU;q|hpM8}HfNFCYBB4&v;$|(_6XUB(sCXY72eVcLhM68d3Y;a z4pE9><&cey0}J;-n$_eoR)xDkA&yc_5ftS#8guLY+(QfL=H_}-pdX;>_0YStz_ot- z%1RvW-atQfN^63@(b*JyKKJ;o$^3QGSFhiFL@j>)@)4ZH@AwxG-xQD5F?S9Xup1JI zMuyRLt+}yBf9CpKj%jg7fG|I84qn$9izD(3cs9r%rpQPp zA<%ahRTP$|#LL&5H21$At;c70D#d3Rr+6iKD{8_Yss_W!_P+ILXB`!p8%X4qP;?FJ<&+X` zm5&hAs)hL)Q2`Y|HM$c}3krPrN@Y#w=*W=7wAo~0Xmol?39cKTq@iBEntk#7$s_dK zyZQGY{(Acixv)S0K54FA=RT1Ts{v_9h>o(j*w6o@%MnFW@kyjI=aJBfiDW#+v0c8R zGU@h7p0~6D;V9zamv2_(x$fdt_;SOZKIo_|^{_piv2%wfl_Xp`(my^?2CBhTAL~c2yHV8*4=SE6} zCv*7%b91^D(A`Z}3HWWGrF5W_pD^0fP31l0`-sO(o}eB*pLqg`K-$x{&*tC#XZG=% zk7ziuYV=$aN<_?!Jv573mN)0nh(Ti+hf@k-8i%M@%;&HHYVnBkZ2eEy(gSBRy>dD`A^@ zt?C|8)mw`JE)}@+hET!-Sg2*kURBy&nO1Y76J`ZIJ zxLko2(AjyXy*L}>`S5#L)RC^S(IJU=*kp2O?EcgxQOnG?c+P-Nf5dZq;l0im4a&iG z)6AUMcmmGNj>w4|5tVvV1WS;01426%YLLWquPkh$aHc>#yOW5Tc4eToHp6W zZ(GY#ndt%Rfv|egsEkK0IN_NjbcMe^Uk0cO;=Slh?EwEG=fFYG&1InCqoHQ6^SeN?cWj0OCLdWm5 zfgQ%c1Be8W;XhS4D2OH(@-j+$qFfV>X(wgQ%Vl;+Cq_)BiTfJHRVe^TNR#quc^&@g z2C%ih{67bG8BwMLLpbI^yi~U2=_Uk}nsNm9)z0X2U2BErajt@LBppXlaKpZNSXo(C z&N|AX)>U1-Qe$!hb+zI8P1>!N*4xc(=nhq9d#8?ypn)~$26Zqb(h#V>VGKFJz>X3K z)BWscB*wE>KhM6NWB(Aa{F?ysl7MTCr=m>kVF6BC+x_g>+3}N3Yl6))xbsNTzJ`Ey zG)R|PDXn5|CE7|Q&e$8;5+VfZK7tbMa1qSIcp{JZz3Z@uV`j02-d}4Ty-C+Pn=E4y zx!IJWO*l$6H~f3O>+0y21pG`EKl#R$D^y32IGV$Bnj!w3$}s&1bhDR2gb)wpO?hIed7ZbAnb9&Gf^Mx z>Az~XMwvxB*kD>h_S1ZrU3$einlTLl>$WL88yM+*=e4$D@=qmEGXi7or?1pN2fg`~ z!wHSS%R~pi?}5GF_P`!672W|`<&b7Bc@Ha+n+wnX@>EJLSBcR2HvF%_!~e4XrDClE zTJ^2XjVA3Kt(~g7sGi=wZW?-UXn14*IXX;ubbsRhxQ50!mW0KQPY|Axyhv|A9UTMx RdG^A>3&!H|7mmQH{{qrSrzrpc literal 2345 zcmY+Fc{r4NAI6^*!CJ{!3FqRfeMQBk+i?(^6RPS}2-}BG!`u+9XpZmVQUr(=9LgxrNKnLEk zfUmkZ{pf)&Lo)qD{)=jF{euwwqo^@CME`KJHeE8UUalWn^Soi(xY9vC=%cI7uSnVY z;0R~-&c1=a0;Yy;&$PX922=i0dD*ZrY z{b85xbqn51jwUaM>%sFly?!evj1SlMM(0RO$J=Y>x_15%?L9Z4z2DjV`Tgsr1J0lO zf-&E#2|_eR8ni4m7+08ldi4+h0H)s9Z>2QA-EH;CMFIx{ z$hW6CLn9=>0_?y$D3T5UaJ}YajM$Ev)pmCGcB`sCE4)*iT!I9-sfn7v=M40Yz_{)b ztE9c_az41a^!+#9vQhPl^X_S#f)gY#+8-BePBJ+pNwc7{*@UF+hcf9F>0Vnnct?VR zBN`eHMV}!!;tNSZra&RZ);7F29*wD@sDKJz!(u$Gie^+&sIlcWg!o1lTUuK$w1D(L zEEaZJ-o~L;hVUyZ@%VeaJr-lQ5&n7)JJi(7(>L7NM!OfU-hPCC{_^!B>ZNIH8YB5e z5)9Avh;(3FPryXev4mc*Cyx7S$X0)K^6?-F|`=0CrFS3Q)lh z1nrt1Betr_tk5R4MKy9s{_bw7rK``#YvLQ^hDkB?mLj)P>$Qe&=j6kQHfduCp--}m zJ}hq^wzm&4F|lK_cO(!}y^?%FLA(xhEA$~K+KTSrcu?xTz!b;^@ovjUW6CH8ffCVy za1yVKX3lBIrj_w71d33&8j!Dz1w;$6u(=ghgAxStOG~Re1_yLfyC&|4Zt(F~Davzr zlnHg+d>dIbfn%0tQ6A;uK>n66rm~GUa@!G?#2xjkm_Mp9{+;7RL%-!Q;No}Nm zkY+rI51by1hA{4y9!%u?i!$U6L+WI>GZ zwo|Y;D9Jr)Sw!A(RWT!&X6g5IQgK93E(=bWvl4`i9{Bkh2B9Nv6V{3~!7-23@Q{+IIDCabZ zr>50J;Av`JbdV_bG~dYD+7bu3d)HEH#BW781of8llLtHRT9`cK2TF#x6Yxh<;}a+` ziuvr#WGR7+`#Z3PS?c z|AMN?0inhOi;1$fDAYnD>9=@#@T#%?Bq0n4Vj*$bUq8uoRS5B+i zh^LkFqQQI~RvPhmMmR`E$E~)rN|bdVzYDM!xIHwelS=xzqq?E{V;99Y$G^vO9QEvH zJcsArQ@Rczb+RNPAu{qPBuNBgse~Rv0|k_7yeKift1A(f30<-gDE1$6GN%Tp zLzGz0LR^V>S%FtgnQvkB*5cY5HRYYof4PLN8d8?3x=TG%7Dc!d{tn1bDs*TGE>-uP zU)|^P+tH+{K&p^>wHH-m+F$jbvdv6yn`5}j|CgN&*dYK2fCcbi*=4S|T?z^{>n7q! zqQ}8S0_9kN>k$u9yFa7JDPuSj7;KP)1)y4_j+cC^&Sg7I6u?D(6)Tcm!~FypcHk6f^v9QJ5)Ng$+}?Q{52^ zHFnh%GquyrW|7;E;(#6_z!8K6aNu86XmY9)qg9!9O)*|RMO0K`EwfRYO6m8MI-6b( zGn*{EfIk=yo;im zlF2$0%YO(q!oUs^iI01XC&`S-7mHuMnlb(Ii{kLi*8mP{axP zQBJ_OqVL^cE>Kcr0Ewrhm2AM%l)N233SL)ddC`cU1@P0ZT)JdoqPfPsb)&tt<2L+m zXV)EMPj8=&3G45ZQU@PBgc)M7#8EO9!7>~sPLQSK*VD#^tP$hcrym#}KYf`O12&Ei z*ug0Efp>Ow-(@2Ebo~Rpu)%)fqx&QGhY^TjEE$U( d9w9y>uOYuiQK^QkS>w66X~t)>X*b}P{{bGFv>yNf diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/3.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/3.gif index a2ae4600b7942f7df27792434681bd83e565c0f3..eb7e19f2e1dd5cd0fa8ebbbbbd346b74cfb82547 100644 GIT binary patch literal 2154 zcmY+FYd}&77RN7_i(K`hKp>BJh=~Z9L-}^6h5$)IU9)WMv6GmnJ*KE}%&fLTQhX(- zm8O;&C7A8lV=C>1nIq++(rRe3QcJV9Q(GHN$!N3tVb0fczWjgZ|37D*ToxLpWC1MT zoi{N4RhT^`&3!<)+j;c+h-aE_UM9s4pEtj0j#z!g~gXu&0sE@B6*hj97l(_{j4iJ7RWv&ysDPFdxEF;!L zhrOwex%c5}$O+^2JDYa~v5~EEgv7+)@^P7kOc28)BDq9V#eSH+rlhih1kLkdFau0x zcy~}~0}NBbePqy)CIPvHjI1dQ@Kv8kWO9f>1^a#6BIL*>JwF-udeBo}|WJyxXF zg=yJNWj5>amGfW@UeLrd(u=5pZpqXEj;3>;|7^sn9`G)L9?$=X9;~aso`J@0{dis( zP~TI^{#R0*ly53P`^M0P^TiTyyW4U<3|XWpILZ-v*QlhH)+Xo0RYUVz=i2ZtCbyaP zJFWR1ng96OHkEvg815v6Sucv4bmp8A;MJOPb^jGb13&QvHML^P3S!#gn&zJ2rEwH9H1tct@2`yP&2nR(FZJ$FYmbFDWl$=$qua{|hnt}0NH87b>sBgyQP zyhv2)T1xcVjA*hZW1lu!SP4+F5f1J z?dwx;(aG)-Y(I_LkCk{Toh1G(%wk0tWNeF{% zaILOJB;-N>mjl$BFnlo|V=~83Ovq6QA0e9(D}Gv55f6G_Zu7j--o}gf>+I_8TENL6 z^mTLZbP`y!cF?%=9^9Kn5}V{q(}@Z3b!Cn%w&pD z1sqncB7m6{g(})zQYH~>2jQh;mY8u!OpYu!A`6_gM|ah8YNW2(Dc|BKdw61Am6U?G zq0ezH01X%grb|pIh?6oXB#5uzLzxB+kDdq(k34zued|>*TK0PEx5n7OmmEK?J<`r4 z;HB1EyF&FS5Sk8Ssa@)URz37WJL);)B`qi*v;FM@A~*-lSsqFC@Y?@bhD+Ay<0ds$Cz0pV)Lxw}-Ci3AR-H*pfP$T2G>xBzQa4>TIB7j3e5l-Gkw` z^1FJvZy<7KUMHo;(%ahBg9CZa^CA8{&~{V!dhE4r_#UKinfc87_fMXm$3IQnA`7&l z(4CdwyWFZD1Q0tZP>vr;%z>%2y*86jlZyl<-Jq5tUPWksH-=S@(kN!r7PSBbqU7Ht zoGE8*6(`#BQx5uWCR#TyM7QI;SjO}poQKgyDzSV_>;4pdWM4Q#XdW2B`^7RF^|7wR zxzfRW906(LGJG@+~)M z-;)otsdgE)aMtpR9lspLGc~yEEtqUl_72U2X>ls;?oveJ;|&Mwuc%TLR#tgWAZKVQ z$YwI;Kvjd80T~hIkFICf!NF|!G{DRhB!D;y(9wakw6t40a9}3OnRn%Kd!0#z2owwvNA_}zhMz}iXd7m=bl|E6+aPAT< zpnThBtPas8MJ6WcfX(8$k>%1Lb1X)fo48=LND$)^zCj$Mzg-kXNQ=;OkKPg7{U+{} pugGwE-9H=EmrNCFD91F#-xQJVgZR2KjB2)JE z<&#UgoI87ouOHtw2Y|K*ownPlwwvn*%OY$x+pEhJ?}pMBhnKy-yzNGk%lkR4%^GQ& z&R(3mICsdgWxdlh-*>i%SP_O+U-VFV0eoO-KD+@y+f15F8J}J=s?Q3Mwq-%;VK#fV zc}zF|BAk3KnezD|##gf1%BtbCZ4~`l?eilsH*+r4pVHS{πtf%D}s6+siq2|1Mr zh(=uC5*L)V5zEY|YtmAo)&4BR!_bMX4$^dCvGh>?Na!0QSxM`s!5NkRI)lLN5pdlZ z`~`Jzun-x&2!1Vva4mq<${8Dj=syAKD`qkKIygc{3w>{mSr!QMLflqKo=A9?svY^Ww7Cw{ zet}AcLU!@6lJb37RRug|+P<7b8cPgk;bk(a0DaGCS`cOj)B**txH>*s&>!<&%?Rc4!1y_DXR_nBvJ=g@He$VLhzl>CXx|C6Q z-E=tC`*nWo5OUFbO=yi}YZ@uKjsmT{77$syN<`u zyWkTNQF~W%%e}VKAI$QyEh! zIQdlIquUZFVVTpN{iV16lN{hgO~JTt4hl2G9f-mF(P6TTd}_J?#E__@l|})h$Sp<% zdl5(nLzzkmO4gBQhikK462yv@QUB>VQmkavxdm?bPB0yk6YM4R9%1c(H={8IX=s;sBpl);-15bO zzf*>MpahpF=^rVZGe4}&$BJsL)U{>jA9@9hMx76-Q%&{sShoFJ77h}5R&HMP z5Ah})cJv{6^g*gC%Xx1+1woaSmihmsLP@2T9~7g@zs91|D(V{~%q9=4j*K+6b?Eg> zF{Ey%8EMCYN>BDsp>9?W{`>FY;9&UdIe-9%B!XyQ+=3Pjh{i1A6R;d7yhOK{t_%!W z2%r$R1`^!_t(SeDJbhyQxn_uUbkemuoIQui&^p-D{!;Y}iK$%kI4wCVt@HSm}1&tRR4m>LczkpnC z*BW)6Dh(s%D8El7UH!!%A#9~7Yq$_swtS@_Wb?A9jYOj25G&=yRs9kBqMfm%Eu}!N zSpHdqG_Z5RUQm)8mlw9&;uyMHysCDxD#|%Mx|VzV`tqOt6#tmtpzhuI=kCn&25koQ ck*liauX?jd*ZTBMO&@q#ehMm^VF7>m4H1wiasU7T diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/4.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/4.gif index 6e38ba6a3d5e40591656e34d659f0151a849c22a..2350eb767835052f0f13f471ed8a39ca9f8eb086 100644 GIT binary patch delta 2123 zcmY+Fd00}38paR%0YndrB}Y^i4d|jdwpq>7)q@I_38E&Ln$)eQ)#0{Uw=ODRii#SN zX4+_&dx>VHSq;*19m~pP8p{?fr^xQKOf}U^H?K9#AM^eB{q?=S_kEvlfa;)XC6N)q z3)J3#H}HlH{B~mPUYMwTTf6Gt#p=P)4=EVPg ze?K_1_1R6;ng$Ia74$N8Si@nKU_?{-Byy{Q+1+D_xkzM z#=gAC$;tEmSwHr6r-<01`80#6+@r9;TNkLhWna(J!^eGPq`DI>(WIeC2u?UQ) zD+~&-!CC=EZ3+mY6t;!UCfg{dI?kN+I&U}a3ln1NTbkBg`k_@J#)-~W;?06;YmI2n z9RhMmdd`zy1v1p)?cqa~|2khj#GufuRUJtOkLE7k@1IOc9UWT@Bvd5khXrSJXZ2ep z^TD#5A!jBiQ8cexa&p4BIi_y;-QDq#jAJN=(aZDK4G!MQJmb+&UGps=yDcMr#WcSp zjI&zMySpffxioVG+D}UdL>K@AcmVJe<~#OW4Q*k#BG*@O&{%<7a7JFP z4sW5uk{yodX{Vk8ix4xD~l0UAd+R-$6{&dyO4kcsvx001>y6v%Gzv7T1v9EiJp9%&cY{nk=+nC zvRBS_1e?y2ffvQhuvY%Igt;O_2n{qr!jZZ3nf~JW=ai&`rz200!Exd<;8F_v(n~ra z29@H9_85KoHmyfT@jT+5)MHbJ(p}FrE2*uk7Wxt#stS4P1tc4vpvMY6GR_v;jCboP#4 z4qN8zC*#w<@j=p}ybKaWHlMXkUSyO>x#FFc;!;j5g0Cph#bPj(xNoFIl19XrEUEMH z%VNgh{o3lpfEbG<#@f%zNhGb@l?_#1;rI3-C!+{AV$rTw`5vfBZ^_6o;)-^;J1Y0| zbbAy#?WugmvjO{+&@UQzfCxS18vNO{Nqe!pp83VKeB%YD6U%Ea*X1t%*CuKz|A{T6 zGilDqYu`1sjEgd?IPQ=KE-MUaVQipPH{g&3!PauxVF9L{!zsZcB3!l3 zDmZ!*FB)vBK5&)U-tUhP04)Auq42@2DjgmR5FP_0(H@4|^9PJA0GFJrz$fP#Cw_TfH?w zTf(n}RIoRty<4viCkcgnXq4X6`fFB2kAM;~*N!QP$9U}JMa;}@CcMjB*6n@`^o=#g zC3g=rkDS(wnK$8FwY0y`49S(RD+>Fg1JWs)W^wQwf_c-g!(2`DfI2h2GpyYiIj&H< zJ7h~-x+79gQXLx?Yb9h5Px0~Lvt|iZx^a# zK5g}(3RrlZ*?)Ql4!6AN^kZjvb9Us<{!=``(mPH-_*!g74901=B7w34%D{mTXJJmg zth>PAPm>1QZ=`1DK=Z-$kp3#8FLD4-zNgjzDEd+@+Q$8a)!%1gn>{0wu)K2NY?fyK z7M#3_?J+v68FCmI3Wdk!iBMr|mF$9V1zfc;qh@KV;stNb-|#Ic!CCCs8=)##+L5?R zvjev*SYh)0%GjMoJCZ)8VUmJvW1!(B9`z-<&>!_2R6wXx zFVLL@W$OI*zH#OBhyRFafVPx8Y!BqZsVl3k+}U&BB1eq%Yi>3}yFpBoEx{y74N6(` zGF86HATWd#M6d!?P$27&gp&0wG(%>Agmn=nq#5GV)@RT*i^**gi%{A{h7l5g_)EGZ zZV{KQT8ZaUQhodtl>_OuqL>4>Z=**f-Uzzq9^&m1{9ybT+NEy-@$~E%5fTvM&3o^x zpKFNo0GNLUhxzG8+4BRpp3zTzrJ&BJaHMolGqWUaQ%O&%<0tNBcjER$DK{W5ZD(d} z4e4Rjf}aYK+s!?G*)m6iHgdzRZS?4@$P7_hRCcm7pJ5bJMHVAAO|=4Zunc>E%A`;U zKrN7ds1cJWoC%Pq6g;uzR72CDx)vgyNg#E%baYB*I*xwVRWInfcKz}xf`-_ic)ibc zxK27Wd>@T=yWe;2J81kC+J*gO@UipdFK%PEUpc=gdc6Jc!Q(3;qG+~-*s8kI3B==4 zj(+I89-@3CyKC4N!=dTuHjk>+|G^NxHV#RTx=4xze^;1~gDg-OQlh@W1{VDv^%pEw delta 2128 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 literal 1923 zcmcIlU2NM_6m}NcLDzO-2pDV><4S1LaD44JPV6>Yv!tX!ODSDY3yf_y*EfmP#Mjtv zllB3nNNC~#1iVZj*u*9T(!_X}KuDXk@q&1mGzqj#LI@R}hP17HU=reQ+?&5mXsh}{ z6vy}HJKy=vx#ym|F)^O*>v^Pd{^jU$o%(yTW z$%3qt#3gHN!Nq$Q#&c+42I;1-YbQTkGblj?`;f0y%C=|J;zEPhpkuZy348$(IKNl`?K5WRWZhc(gm2HOlN>><~3e2dsTV}yA! z>&FGEv>8Ih>CoCQ4-jUeL%{y3{#2%S- z5gwhxwm;Z*W}=R*GwYTck(x-tWn7^!j|!7JuACC_iB}?biKDaKiN-OKE`~mFbA*)J z2Q|@V;gd;rFgm|&%Cb#T^|munEgPJIK8_0tP=E+D`pqedAx8`l-2q|-08MC?mVya= zxHd2`t-}0TpxLaEu{|H!2xn4pfr<)QmT5$^sFn}MG%=#7F)<%gWibZAK$H>&r4o3>2i6|w^7fdmXQLK;$ScOs4W_#AP z=;eXs+gX_^lQQO29qQpI7S(V>7PXkFiFq>y#fTo&fi6eY7!C`(iHrhqE0C6oRe?n; zId)OtZ>dR=GI6uSq&cVPTkDx*a>6AAt4ue%$@FeMGn&+7UDHG*B(ut=GHAGCmPe0y zzIB)O;#XRuvc)$F)PRWHi@1PTL10s8En9a;^V$Mx(pF2DlCDxEO_)ateigbnQKUz* zmO_;7rr(2etE*pIk^H~vTggQwXcsYUwUWT%kyuk|9*y+hQ)}$q*1+0u+7;Qb(~jw+ z)6lU^sa@Kx-y8jCfa3yECY8w5ez^8yqW^Wiw`*ki%HJ1$e)sIn4exN)3H05YJBDQI z?L+CAYoF#W&wg?K#?3S951y+B9`3##@sAWsf$rYTD~IdH6X~x5!GYlQm+OJc+^Y+Z z0|wgS)&nn+f^MOqlcV1#FbmzI1tMz&y*uC$OuU`E4K!bbbP`yfiVU{avm4y^0i z+V_{{Q0w5y-hF+;#z;R?Ftm7Tu^8-PUdNU$CLUt@-Dk*^8zaa1pJ~`{SxhH5Ce!)p tiNlX=WvT}kiyJ?@`j2%#6SMx(#;Icy>EC*OciG=$W^_Dta`(a4{skxsWhMXs diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottom.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottom.png index 11b8dc5e871a10d4b0d6a819658cf3ca63f0c198..0ddfd15b295af372bf0cc4b7f9010be8517f73ab 100644 GIT binary patch delta 701 zcmaFKxsYvwWDpAj14E>LUp|mxNq6*hWMJ6X&;2Kn706de_6YK2V5m}KU}$JzVE6?T zYIwoGP-?)y@G60U!D|R9 zU{Eb_jVMV;EJ?LWE=mPb3`Pb<2D%33x&}re2BucV=2oT#+6D$z1_tjxb6f?Qj?j>s zpOTqYiCe?GbsI7#x3Z|!GcK+Qi71Ki^|4CM&(%vz$xlkvtH>>2V9=O&HOM#nv4Oze z=ixlBwr;bVb7kuWSudvuu}xEa7kKA)ty!YBF(pNG_s_4ZYfNUhTyjq2msL^hy*K-! zjjz?4EXC`m4mz#%nybj*5FjR5CFOH+i`>fTpN?N!b@SWxn7r#onimY-FRhn-ziL;I zpF?H5RoriQpzW<&pt$f4zj+Hb2Ztfq(wJj4ja{W@|Rq6b7VLx}|nMpt1iKQJn z=)bV>=mCz8+>Zm_u*>j1wcWpLTg0dPk53vdw@-a>bmy$(JKJ(^xGmhM?K4^BU`ygL zrhblD=5JlZUp#vz@Wl39gz2SeTeW-J?$$@@oLPNZ;MKvIvfaX8H7DjBs$ICyMD&~Z zj5e0}O7EMh)#W2q=WHxaHv75ok7s6R_M2Ue7j?Won!ZrpC-r-#u~VeOqK0qJO&(sf z?Poim{)hQRmz}BW&YImz_@9|PoAQCt^3r*S_q!fwC+^dVQ1q|5y1s1l|7lK1TLY(F zTK93*MH}z4Tqma=3p?~QRW*$3deziN_2>NWmw))R?L%&-f9=e8o7eR>xBGt*fBf&a V)nmQn>%drM@O1TaS?83{1OOPVDbN4_ literal 1257 zcmcIky>HV%6n9aD(m*9XBvc^~CwHk3@%bZZ@X1cqCJhZDp=#Vxn0mD@sY(1H`zpJo z0tpsaU_+|d8Bq}vBNBfB69WuLOsriI;_ReJ+X1GYd>?-Ie!utbcTe|Xv2klWdpXN- z+<0xFvc%>Q*2glZ*|=Y={$$f=I9D?=tnFm1=gFqOa6ja@GZ&IR^5y&E-^_T4&acvP zKrppE7Z|ofI8lL89!l~<{$j*f&LAE3`bw1@pY@L`P4^kJ} z(fQdV7+9?@g0dG7kQbz!DJpr8pBChztQMzlfF`EkHgO7wW8npi5us;aohJEpvj4;MNlmrnDm>E!GMwH%!7Z{$`E%lCHwF44) zK_>*|rlKXtBTmDpLp-TqN=mXQ$vIKUNqIw3k#Z9$g$IZ5J*Q*vx@Xy~t)uXQAr+A% zqJr3mA9Cu$HJAu-NSIXhr;npq}ld4Ypz z$#!s?K;La^aA^Eze!Z+&S+KH%gStFOeQ=d0vKZ=qBJ@4dlMJ$PYWFI8J|>dKq3N|~ zgag7ItJu3At~Hp?RIM^=WOnC2zaQhkxzRoU<)1enU#(4koqGK?^KE5WpZIikW$)Sk YqhC+5S9Y%dP#K1+%{MCV=GLD61)*6zjQ{`u diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottomleft.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/bottomleft.png index 8dcf7cc6fbfadf6dc1bde4b5bd4ce90ebcefc148..1a1290f7c2e063cc49686f08eabe1f1a56b5436e 100644 GIT binary patch delta 732 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 Yee3>!cl5-^H-wzZj^s0I!#D5#1-?yA-T(jq diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornerbottomleft.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornerbottomleft.png index 91bd8329da8c48420e115f90decb7a8e623edc6e..4149423e15411072fc03a068d973aa9cdf0a73b4 100644 GIT binary patch delta 769 zcmbQwb)Id4WDpAj1B2I$bF+aIOS+@4BLl<6e(pbstU$g(vPY0F14ES>14Ba#1H&(% zP{RubhEf9thF1v;3|2E37{m+a>E**ZT)2Cq*97bT6n-n(39k>4~t+ zJcmUWB=+d6K5_Ky;RLR9vt3hD7iPWnNqKn2;mV~e-@#x{-k*kach{jZbRneRu;8-#>G`35hW46K32*3xq68y`AMmI z6}bfr3>p)!2Ki<`HW1kRJe=p%)@^oku58^P>*W+7wrPs*0`L5;HA~bsrlg4O{`qxv zjmhkmOU{Y>vMP$b_hw(T@wIxBrFi|+L8rA|a}^mJ0>mV%qZDi}-Z^@kztw_Ngz9?wpl; zXIt(Kw}l(EeI~0MY)L%E)Xy=?{H=@li)YUSp4gs?FugQwt9EbO-TFwKGpkPvygE2j zwp;kC=ES^1wF?)Th<+2F(Z(`g>3vhRx_qSSoQ=iFWpsr9XybjB>*VxfVTYcks)li0ubTR({+$2)@(;hZeaP+f kubmlh^Sb`#cK=V}kN^F)daRdx9T>|Dp00i_>zopr0R7EL-T(jq literal 1311 zcmcIk%WD%s7~d8tHMQcqRgsSC#e1;A&{Kz<$A0tue&090`Iy_Isq^i= z6F!Qf+7rX^G@19hy|smmU+=dZAk!XaAdzh)ZN62#fy7A5soELkZc45m?D zGa@tqfCicxp)UoKY|@IMf;K#7qs&|?tIQRZuuAtveNsgvU>#u@RP>VJh?NNKaf)Q^ znjsB57hH_c{cbQYmK+5!(?%fR=NN?*0wB=s=RLasct2r?pAF9P9e-XNXu_Z!SE|>jf!Ef4m$c4jU$nucq8REe>vj&zcjNzQA zl5FzCk)zm}<>}?}%G2fyj?lClsNQOaldXCn!>Nf!WP}yjf}Ed)b!GyTh*9)z!nCud zS&CMVKcv~HY}!Q!#4>{9BDXm;qBig-E@KqsS&nB|f#CvKE-VT?q7WS4g0DL5fG15= z%gt_w2eVvARS(CCLWeMwbxtV(XDtBek(0y0vtE9Ubq|p56 z6nQ>6-Nzwg=5SfI5w)XYFTU*LPq^2lde-$14Ba#1H&(% zP{RubhEf9thF1v;3|2E37{m+a>z7G8IehxV=y{bl`JjNO@sawg<){D6QrA(PeE0p;DvNi_^XC{}{3jAFJg2T)o7U{G?R9 zirfMQ291eVgM70e8wl)u9?tV>>o&VNSGI1D^>T_3+cd>@fp>n_nk8x*Q&L2C|NOeT z#$Qa&fQ$gQ0I>G-u(H@{tv z$-8c(dBNcQ(t6qVt9AwXIfUny9Nx{-c}Pd(`|r8Z$~T^7>gSkc{?&rI(pXQXbHE`;sbsuM4wDCU6b#nT#utQH%Rl~ThS519Xf6o7Y`G;TIKIC@# k*UpT$d0l^VyZ;p^q! z#CQM?=5W$M3f3(X$hv_jR)Aa>a{NVlUxl!A`X0IT8Bw(iM$xP(#CV2HNqwHJs3nBK z6e{RuoCW~UK-c2*xk#E#+euW^hi4s>oz2MVY)Or2bYCJUc_IND2rIxd%BCxNak|PW zlC^J!G^o1ZQk?GhgMnOn3?wZFfiS~`R8|Osa1X;r`B=2)B*-clj4CGJqkv~wGVr1h zB_Bzq+UP`(%#x$!#qrcoJtp~!(?yJJ5yDEP!c+vtate@(#bS`I?6UdGKhtNfx&CWx!FL9CEd~2k%3`jKlh(RRv=#?*(1o8fuTx`fuW&=f#DZW zsNn?zL#Y7+!>a@a2CEqi4B`cIb_Lo1C76=D-CY>|xA&jfKhaPkp1s7=*OmPVI}@v_ z#e5-OTc8SOPZ!4!j_aXk9Jvk{aJXEw5A{4bck?OD>e+frHgYL_mbmh)=Tk+u)}{Kr zjR8T8ifigP4;viXU**ZUF;>#>A^ZzS)lr1ol1;=Xteto86o%TQ|sh zIYo$Vn&P{_JHKnq619yfDWbc7eqCK-GP~uHb0WX2iem4**%xhmt=?oQUO#ovX|2~> zMFxieG07?^pOahUR!;wP{MxFU->%2xT{qIaVDNrvz3lr{yMp{2!gEUw@8;<|q$BeE z_grb^8_svEocVWi|1hp?nYfYbmm;r9=dTOWia0XC>d+mV3i(;YMwr$tnk15|1(UbIdY->mvT**)xGB zw&x;DFHPI3-P?AzK2qn*>eB+R4$hSA7XGR^G4D|A!i6TH-^6FMvCLO`-&CzGAE`QL zV{x+C&xL}tHIh4MbB-!qM!A{`bre0y&4@S<%$+xhfA%rCm^OkH=@ z>|VnE%;edW4~&+V&O5x{^*}pupH_sTf7R9XWt;y`b4uD8IQ7!HkFze?c%S7uIsI7J zp{J>;VO-a%rar1a=YPNa!>?^0ay$KNXU5ySuD`k6|C9LRf4{9B>m^?Y#xjGatDnm{ Hr-UW|j37Om literal 1293 zcmcIkO=uHA6yDZSVzkgIND;(g1y62ff0D*5yQyu`+DMaDvtaG1+ucdJCi}zel-<@U zQatEIQ1DPZs1)m=;6X1Q3m)|(coaN{2M@(lPm0baY0~zfrw%(m`{sS$d-Kg>9!!@m z_r*`g8HVXAOysZ8`DoN*y>$HgsJEX^J^pAxi_x|cGw(;6-oy=`VUC@Mde^5fcYaah zDKa)gav15vavh*qHez@Q3P~u4H`$W`Wf_P(W{Q)t;o1q^bmvhbv^_={4n5tdAp+)6 z)pAr80KfvvRN3pPB46}!Xu+CT#;Ckp(v0PrkullfY+MOt3bql^L1@<jYfU9U!KG$n$g%WhqTR znoOgy**KjQY*yrJ`SDgv`lqrBgm^N9K@cPYDdFNO6f&6%~_6XBZJv!3?JNS=arqR~RTg3IowU`D(bz~!l_*64t zzh;$yjIPhYMFJ0HqBL%-M7k8k#` zej8x7OZd(3?7hb$7;|^0UY+mS{#h?GFE;-CP**;0ZuBZ!@8Zvoy#M&U`_gI;o(pfe Pl$R-tmGZAg=T`p$bC*w| diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornertopright.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/cornertopright.png index b0ab1a22f67d1dbbaae0c92f58d586768310470f..4882cc34f64043e2e2716e4959abc9e0aa5fa303 100644 GIT binary patch delta 769 zcmZ3+b&+j?WDpAj1B2I$bF+aIOS+@4BLl<6e(pbstU$g(vPY0F14ES>14Ba#1H&(% zP{RubhEf9thF1v;3|2E37{m+a>*$=$oslNt>(eBUSiz`_C`5d>gj;o#OgZe>xcXIxwr5>XQ2>tmIipR1RclAn~S zSCL!5z@RblYLIXCV*`P`&%=3MZQW)!=gQU%vR+ORVwgKoW zF?rXGG%pyuUs^Bwe$}oZKZo$#lEb@sIuGfHeE&UHTKR_a9V=)4-P}KnYg;C6R;Z1!{EAJ5Ft>^Hj_FY0)GG<~7G zPwMwfW2Z=mMGfDcn>@T|+s}4B{SWhtE<01#oi)3c@INzoHsu4O<)!lu?{_`WPTZ#z zq3B}qi#Fb8xlT?$7Ix@qs%jY5^{T0l>d*P#FaPjs+lSmv l|Js@HHm~b%ZukEr{`lW-tH*lD*MYIj;OXk;vd$@?2>>TpO|Jj| literal 1318 zcmcIkOK1~87+xQg8mX^JsReP^-b$0%N79%zNlBB|MolcuVyi-NyE{qNWFPEKyJ;yF zJXr*3@d1V21P?+*5k)9?@pTjGr3Wb}6nc|h1Q8WylQe02&{Kz<$Nuww-~Z1yKQl9s zKHKDJ^H3Dkl@Wv<}}nfBW~NwJZ%sYd0NyJ_}cwkhi1F}Lsew0h$g zF}C2|VH~%RgjGWaqN*W^;UVjXEO(u5b_mN+*JC(!L68m2Cn?4#@|84`3U`-GNiHA^ zMo~`HBQyYj2C5RFhXN@kWyVon?Vq$zW-=|xlLa}X(A`l_xFis;hOh)mT2Z%!QiLvZ z3S{k?Aq~ndxDcUZZZI&M8US&_Lcs51y)wi5fxpYg1-VeLs}p1-49-b9;DUf-7&34I zA0!`1rrhYLhsZKWPJ>*F%w{z7=`jp z7?x-l#c1XDeX4~V!z$Pyp5enTa+^~A!< zI<|>s>~_r*S;!ieCgG^6NjU^fJr{;`<3IDOWKGI~lqIay={wp(1L2KKp*()wM(7#@jpX-+nGEj4Z!8 uoc{21Xye4=>ACZ5*5dcu&eZ4MeZlEJ8OS+@4BLl<6e(pbstU$g(vPY0F14ES>14Ba#1H&(% zP{RubhEf9thF1v;3|2E37{m+a>< z8c~vxSdwa$T$Bo=7>o>z40H|5bq$O{3{0(z&8o#OgZe>xcXIxwr5>XQ2>tmIipR1RclAn~SSCL!5z@RblYLIXCV*`P`&%=3M zZQW)!=gQU%vR+ORVwgKoWF?rXGG%pyuUs^Bwe$}oZKZo$# zlEb@sIuGfHeE&UHTKR_a9V=)4-P}KnYg;C6R;Z1!{EAJ5Ft>^Hj_FY0)GG<~7GPwMwfW2Z=mMGfDcn>@T|+s}4B z{SWhtE<01#oi)3c@INzoHsu4O<)!lu?{_`WPTZ#zq3B}q zi#Fb8xlT?$7Ix@qs%jY5^{T0l>d*P#FaPjs+lSmv|Js@HHm~b%ZukEr{`lW-tH*lD R*MYIj;OXk;vd$@?2>^ZED*^xj literal 1252 zcmcIk&2G~`5Oz^PA*2UDLI{CaxmV)#PtuT;ld4Tx8bm_XSfX&s#@?hRvDdP{Jp#+NlUG*<_@ga z!4`7YU@n||d<3Lja|_Q85J(~k>z?! zQVpz?u%^G3Z^sbjW{TKtKO;8x6zcFkQxY$b%+(~I_J|48XG7Po$p|4CxlT=fQEsd4 zpuzUst;3LY4?C89II^pbyjstj2?4Ul1VxEA_9K$iTU2)JJ*+>8c8oPK*kCP)s)DdLC9YbOvOnxjD@V ze>Hheh=5=m$FUL{3J-@^t5&O6)v>M@0a1(&d_j|_rs9E&IH3X76cx`R1JML0$!>y&7U$#ona)614tA(~3c>Xd#4G^Lw3 z72=FAnd<48F8I-Z1as_}Ucr7i&aTC=F&i_F`62?%wDX!dHW~2HqoVG5bjWbv4^2FG z{EqDl0}<1ZNf$cy`S*t% zz$~|#YgX>a9{c{F-|O`@Pwp2Aga@a2CEqi4B`cIb_Lo1C76=D-CY>|xA&jfKhaPkp1s7=*OmPVI}@v_ z#e5-OTc8SOPZ!4!j_aw8~ZT^y?)JbfkN(s}ylUM0P&FMGY_@Z~Wbl)kBcZ~2CaZYl{3swJ)wB`Jv|saDBF zsX&Us$iT=z*T7uYz$nDP)XLc0%G5yHz`)AD;QeQgt3VeZH00)|WTsW()-Z3~hRn&W zENbpE+N+NuHtdjF{^%7I^lT!66atjz3G$vjR^38s1Ah7p&IM1uC+wA6C*}6g2 z%PB%^(-hwY-uYc?mZ)t^NfF)s^Xuvwli4kooD=zFRTO*g&Aw>kYxO2e@%pKQPHVm9 zDl#|(h)GsS`JCJ$w{rTYt)}s+7;yI5T09dcsEbyAsvzL zzvoIT-*CQT<;=gE`-gFD%fyXbzZ7{@I)7c*&mDPY(vNpyX@?H_FKj$|fa4?gW>@1y9j}k3FO>I5{hn#;6zQ<2;oEbQhZk-8+0Li`VSdqNXX?7M zX7>{QXC}|4d|64$R1sQ-?ZJ!5>_^g=B}r+M)~1*kngwGoI^CV5YqB5gPDxs& zs91?Vp$9L5hvFBah=(E~NPE$P2?h*|lC&`*nrQ%8(=o$|kPks#xXd1@Qk6azQOKN?6jKi()ttq_nr<<%k(z~+GA3Xa zmoy{J0svT`sd4svIKySEB%aeI7j2wh%*x7QS&6FbNWvehNtCQ(f-nnv!13z z*KQcHz=M!-oE>$OfkGw+lBSJ8D98sCP7Hz2a8QT{(a7*AkVgbeAp-~zAaEQV1WAn0 zj~3%KHsPmp%vOuibZVlRlm5loIYKN6!fLe|tcpR?Ey?Uu|XW_ z8NbsrRgsFOts|1qbX3C7GD_j0TB)=}=sqV4;h$TvjyGRfS& zl>z#E9CIIsyjdhwWMgL6jXn4DM3!Q5>C~v~ThZT+`mb?4ov)tw2iNL>G5pp(b%OMe*tmoQj`Dy diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/lefttop.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/lefttop.png index 6456879bb8f11417a5e4de0c3a365588869e6046..d8a029eb7bdde6a3b3cbd94e06d393bd967833ce 100644 GIT binary patch delta 729 zcmeC-+RHXUGKhtNfnoQ#8b2V#lJ4m1$iT3%pZiZDE0C{{>=ES4z)+>ez|hdb!0-zw z)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15==?n?k)`f+xyS#pJ*r%&R*i_>&pIworzV| zoPTY=8lVbmPZ!4!j_bCkt%V!{7+4P8`^veZD0w3Du1O8*Z)cqp4c&U z{nFgwc~<}F`ely)EUhxuw6b3pVzLh2+t4%7O(lUrwZt`|BqgyV)hf9t6-Y4{85kMp z8kp-E7=;*^S{a*LnHp#t7+4t?y#LH`6=*X;LvDUbW?Cg~4fED*$ei5DqE^qixGE%~ zB*NFnDmgz_FEJ%QDOIl`w}62`W8&2y-|WW*0(+l_^Ss)+&2G+>ts7*$oFc?FP4Qje zo!_-)iQ2}L6w%#3zpkz^ncZ^9IgwvhMX~qZ?29(OR&TNtub(>TwAO2`B7;MKm}Hfd z&&e%vE2n=ter?swZ`Wh;t{Z7yFnGVTUiST}T|s^h;khM;ck^@}(h>Rod#<$d4d**n z&iuQ%e;C)cOx(!zOOaQl^Vfy_+>vJ{{dgyqcIcr0!p5TqI6iVe4t&Ed!~4{B|FUfn zpYA_CX}H`z^~KShvy$&@%e~>YaHF=*WR-(0iN~1wIcAx^brFB@?3ut5+j9}7m!@si z?rpnUAE|R@^=W}u2WQH53xCy|n0Kgl;X)J9Z{joBSmrCeZ>m<8k5rwru{hc6=fXdp znW5Qlb~Rqq@%m``LV2Im@0rF?R@$l<`-Rdrmj0{b}!+7X7X&x z2S&?F=N;bfdZ3-SPb)&vzv}Axvd#aeIVEikoO)^9$5|I`yw7r-oPI3q(9=}aFs|!W zQy_`u$t?nicq>_QAt zPk7LahJ=$|yc(k(J$NzPjL{f5NaAns?7`V>X@P^DnCyJ)o9B7ncb=KdHI96kJ8>9>84}<=KD`{>U1XxN`$ui5p691*weRNhUpmyddJu8)ju?Nl1$E# zoP!b3EfXlZff-JOd;;>qJ@&XqRr&+OT=BZ3T1Fgc)&h?EhRw)hzKzrxCSUo99&*0De6j1O>68}HY)oPB^#I^;2U+*mHZ4FYD#n+gdqz; z2&rY*@gNzPE6#wN zjnY|mw2CyFpK9i$e;Ia>5L<%K^Srnx#x17``E)uBIROenj3Q$0vPqC1Gu^WdksX~p zc2!5WL%#xDv|uff49f5+c#|AcuOFiTFdZwvT z#c~Wpvbuq)7}{o4hV9@#>uXd^uLZr9uyrqYN^c$Ifh^j-ABcQI^dOTg9@-eD&&N>k zIFzjl@sNX=eK+>TyO9#bTr1?qmB@zigg^Fx>pcv0^m1VA^YbIW&#kY|_pg808r&4V zF@qx?yLx{;UEAzXYr{id9zHvD{>{(Ij}vcSyt;X&Yw7z1<<9DMk2KkN*&N#HqOwe3 LvXp;4are<*hs;S? diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/right.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/right.png index 67dfd00170a7aad5e604fb22f24d77a63c4b8eb3..58a51f17ae6c42be9601d51e5e32d5c2eff9087a 100644 GIT binary patch delta 697 zcmaFHIhSpMWDpAj1H-b@KHq>8OS+@4BLl<6e(pbstU$g(vPY0F14ES>14Ba#1H&(% zP{RubhEf9thF1v;3|2E37{m+a>pFMN+&y#g%&jvl40f5U7iV}+i=ODFlE9!^ z;u=wsl30>zm0Xkxq!^40j0|)Q%ykWnLJUl;jLoe~4YUmmtPBj^f9ALfG#Q~GH$Npa ztrE9}dFwW0PHtsUt7lwX6%tVr;p=0SoS&or%A!686QvP#P5oIxPjWjP9ykA-``+n7~AU}uj z+>*n)c{&g2h%xBS$TO3Eyc0`1bkKic zIw7{!_GiAGlziLj*J5;-Hp^4}>@fmF_ z^OfE=RjbQKs?OP1oNV@U;UCY;(Cjz68ZYX2eKdWcyie-)Ok<}=heZwFo|`wo{Z>z_8 S$=89g%;4$j=d#Wzp$Py(Q7tI| literal 1254 zcmcIkO=}ZD7~V>eG+OWr5kWevcr!cuku+x5q_o-AMw(cf1*0dYyOVTHc4yh0y4#{c z#e)iZ5Ipox6vd;rD*XYTy!a3F!&d0ty&-1?X%rLK(8@DI3SF?g3 zOx6~S6+Tb!K9)Jn$FsXHp7LotoU54`-kxOamkGdMydMg}nF~oD`}X76J`Y}I^DR~l z2xboTfa$nIkTs~}p`tz#FGgJDe1d4zmyktW3EOm)NU`e+`b_L&t4kPIB^}2rivR!- zICfdQSE$Q%ze?7e#m#^;Hyft4*|kcxI8({$G2&#GFbrb1=Y=RPi>W5!>m&?CkV06u zEY2p$K&!qCsx%-VFDW@o*76`fEvZGdRGhvEnwWt**aK=2sItrl6=_BO@nX^@R)81oT?Q4~p$Cefe+l~Sn$WfiJwjw5p6hR1N6^TO+WkpmrrgjV4A zsb7gMUZv}-EQ(2@VH<1?`@=+DI53af2xII+MUvrAnG2H6*2}neP zZV0MPO;4CdK%=Z9J~1#O6;)Q$oUG-Pys4Csb_;2R2Z#85&@p=ES4z)+>ez|hdb!0-zw z)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15==?n?k)`f+xyS#pJ*r%&0gZ^>&pIworzV| z@`Y&aYM=^xPZ!4!j_a_I5$xGuaXech5fz>FFo}n?&f{EF;{QkH>D$sU>hTQy=%(P0}8s@FrkU6=PMXjE3 zaaBk}NrbPDRdRl=USdjqQmS4>ZUF;>#>A^ZzS)lr1ol1;=Xteto86o%TQ|shIYo$V zn&P{_JHKnq619yfDWbc7eqCK-GP~uHb0WX2iem4**%xhmt=?oQUO#ovX|2~>MFxie zG07?^pOahUR!;wP{MxFU->%2xT{qIaVDNrvz3lr{yMp{2!gEUw@8;<|q$BeE_grb^ z8_svEocVWi|1hp?nYfYbmm;r9=dTOWia0XC>d+mV3i(;YMwr$tnk15|1(UbIdY->mvT**)xGBw&x;D zFHPI3-P?AzK2qn*>eB+R4$hSA7XGR^G4D|A!i6TH-^6FMvCLO`-&CzGAE`QLV{x+C z&xL}tHIh4MbB-!qM!A{`bre0y&4@S<%$+xhfA%rCm^OkH=@>|VnE z%;edW4~&+V&O5x{^*}pupH_sTf7R9XWt;y`b4uD8IQ7!HkFze?c%S7uIsI7Jp{J>; zVO-a%rar1a=YPNa!>?^0ay$KNXU5ySuD`k6|C9LRf4{9B>m^?Y#xjGatDnm{r-UW| D*x5VQ literal 1289 zcmcIkO-~a+7+#G+Ex`yTh8T&Hls8jSVx--R=}$s{Q@r6()WC4qPkjIR;13C2z_Tkj z?;;f&wgnW!L=-DPE(tmQE`8o7DnlV+MZO|xw#lfvT}4b_I+QdOII7k_7*tW+u(C7& zfCh%1rLU)CR(A4e%_wfTsIpO3w2g+A(dnsNTna=&HW5}qU^XpJ46<~jDUx*Zg9O9oyP(&Qt>M2*hH z$t<~gOqf10n4VI& zw8*hyitW%3fI4&uhDIDPCUQO8(~&s%k72sj^~+gzo6)i88bnQGA`5%OGw!fwx+d0a z*Hm%NFx5JOj#ZanFZj>;+EtTlL9Qk2-pl>cyGMB}i=OYtBHtE0&LnFmw?@hHF%muw z6}yIg)kV~i8@u@Ca+zR?rNXol+cH0MXE(vQ+4s-4TNA$;&GF=?z1Z-F#dq8H2Nu4x zb{~)SmwyCHFCL!$cKg<=&7F~}^8D|wtIrntwQD=M$(P{HrMa=%XmwjAnpA1FTzEaR G`sgn&<4N)W diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/righttop.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/righttop.png index 58b3596035b51b825dcea5f86d09c1e9a2b7235e..11832f2e93996fcd7ebaa11c32aabe2ce2ed35fc 100644 GIT binary patch delta 730 zcmeC-+Q&9QGKhtNfnoQ#8b2V#lJ4m1$iT3%pZiZDE0C{{>=ES4z)+>ez|hdb!0-zw z)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15==?n?k)`f+xyS#pJ*r%!CvC&>&pIworzV| zoPTY=8lVarPZ!4!j_aJ1-7 z){Y}n+5~!iAMakI8UBBL>)E)bZyX053rv|Ox~U{EsFt`!l%ynLsS+C#C9Da|r@lD4b5`=5ZMiqx7H-t`nXGcKCGi+jKgTTdw=Uu@o;?$IVtX#a^wPAg z+P!Ue>mzl}tUfL9>flV-ZsD(*6Y~z$E?j6L`b~UB8_Rs9_f6I6@{y`@HWnwF{apCR zGcz>%&926aI$j@5UnuXB`aRRwDbit4!?))q4=>vGvz<@>!~CMl&eU~h&F&@q&rF_8 z`M_v->Ab`HT@SPq_i05a`d3|DU$*)GG^eDkfm1K7`#9^OjrUoulhcod9eSFo8pd_K zYU-o-wA9{XdC6{`cGJv0n0ZU@S9uy85}Sb4q9e02`4x A6#xJL literal 1292 zcmcIkO-~a+7+wq^rN{w4h)B?Jy&1c+A1&){wk6PlRB0u26On^)*`2m)yC3Wh=~9VN zqKVwR7{i~CgZ=W}{P4 zGAo`@lov8H?VRKD*bV-(zE;)bT99iAJNNRS^v+S9$fE1}iO9D^PcljQ)YcezJ}!ih zL%}KHn&u(u*p0pO_Hv$JZf7%-YGljWn~XkTPxtO*V}Bareq-bQv#;-mr&g|fd-~%JO7m5pPN$~E2DtlD{p*0H}dM|uWj@B$fKU^(f-ELr}b+@mdZ}& KGjFCIZ2Sd|t4=2X diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/top.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/top.png index c5c30ca663383d4463dcad0db05a52de0a4d9221..6de0bb6d308688602f1b2cecfef004ef5a72ad57 100644 GIT binary patch delta 698 zcmaFHIgf3EWDpAj14E>LUp|mxNq6*hWMJ6X&;2Kn706de_6YK2V5m}KU}$JzVE6?T zYIwoGP-?)y@G60U!D< z8c~vxSdwa$T$Bo=7>o>z40H|5bq$O{3{0(z&8o#OgZe>xcXIxwr5>XQ2>tmIipR1RclAn~SSCL!5z@RblYLIXCV*`P`&%=3M zZQW)!=gQU%vR+ORVwgKoWF?rXGG%pyuUs^Bwe$}oZKZo$# zlEb@sIuGfHeE&UHTKR_a9V=)4-P}KnYg;C6R;Z1!{EAJ5Ft>^Hj_FY0)GG<~7GPwMwfW2Z=mMGfDcn>@T|+s}4B z{SWhtE<01#oi)3c@INzoHsu4O<)!lu?{_`WPTZ#zq3B}q zi#Fb8xlT?$7Ix@qs%jY5^{T0l>d*P#FaPjs+lSmv|Js@HHm~b%ZukEr{`lW-tH*lD R*MYIj;OXk;vd$@?2>_i_&(I zmhuz&Cr}X*I}&1KU|~Wm{Q*b}EU4n_q)F2Ork;Ese(!yr_r2#{-JA91-G%JcEXQ#R z^;%_v%`>deXU?+mSG9V;rZeGc-ORA|B4h6+n||#{$Z_WulRoqH`^!Jfc!{oU(sF5AziZ;Jo%IdMkz%Hf;#BSdUwbrjdf5a0R}ly7A#54f!va)6qI6N={9H~3hp5fCddI6H$eiEkbY@+{Hhb+hy=Y5 zlv}EvAg7!rQ73p@K@^u1Nmc|&737>L7d7>crskg>!w;QKz#GJN+B?(myeStnS<>>- z2!70I1lM6A#4%w~)sr)wu!H{yW?N&u{OzEhUW;u(+{Z5VXvj2^r!})JtxWa@a2CEqi4B`cIb_Lo1C76=D-CY>|xA&jfKhaPkjJ?Fu*OmPVI}@v_ z#e5-OTc8RnPZ!4!j_a;HhI|JU1P;$pPGwj*|K0x8e2tIJ7Kzw8>G&MHrrg!xld9Ks z%Sb@?s*jJisk!WPk3D~C;_fpsY^^)@VxpT$0)uLaYeY#(Vo9o1a#1RfVlXl=GSD?J z*EKK-F)+0BnCZgZOXSA`*S9;%6tu7y_I%i{Xvf0mte>^io zv)}A$yr|>#(e#D#KB?a`jh!ML7Bzf(Zu0P=Z9m)j^gqlmy6j9{ch>A)!vDuyx;XeJ8_>@gra}d)%9hY|4(yD+8Q|Z(z=hcF4}mX0mZ69(w{cC5&+q|y7x!wPh_~U=Stsd(oUkAoAgQu&X%Q~loCIE^eHVgm& literal 1290 zcmcIk%WD%s7+)XM7%f_bRupkq@n&}Rku+x6q>pSL5fekR*eVEacPHtZ?4!F=cN;{C zAlP$3Xi-5Bya`h9;7LIQL68=_h@SMWe}D&PH)+!Lpr;NykNxKR{l0I0^D)ci(nN3k zbey87-om6jMdlvT568l>Z|&w2G9C0r3rdW%yD|M?xamw@_bBSfiLme6{C@8bG4|uJ z8Ju^KiVfQWieVy(6(E;{9DkcW=@XW|&|{`}MbvDQQFVJ3F@fn&(oo>2S{-39i)x0I zr2zmmF!U@vohq_LCy(Zg$)<}c&61)u>sm&qhjMW#5DC~sSOtOEuskuy(h;Xf)}a~F zAacR=EIkqi12e@k$lERgNrp>ktdIoBL55HBne^aAP*E|stXhCi1D<8cz>7kfd?cBu z(YZL8C0DPCQ}TE_Ci%A z$jH-N!-@0?dDU5a0cUAC4Ag1u!>LXukma?-BQnB3bs)#Eu)|D%5;2O=P1vqt+l^f7 z_~V9)eA}&iAYT!r5V^yt8?}o^vWiiTXE{E>3JET$a2Zj!Bnqh;+wd)?UGSo<8`Z^~ z@RY)(MUE9yY#YAKsSTH4D8x2lBGtn)?XrXa2&QWty_^NN5nYR}LDWDdvam-q<92GM zYhu-QO%>-1Q>`KBSTzZDjsMKAl{F~~QkJk&ms_cKu5wQnUETMDzD2s1LFV?ao+Z!6 zsqk^A*j4PSE~0i-?A7&iCE`;k$RkQ@^}*+n_|ovv{KoW)H|5`(o;_cA{^`T;v!5%Q z?;i`t`!Bry`s0{em&r?$fA2+Hn LR+3+i-n#!65lc>& diff --git a/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/topright.png b/src/Shared/HandyControl_Shared/Resources/Images/GlowWindow/topright.png index d6129fe7a08c1d6c866233234a927bbc12abe7b3..6f403bce3c80be5214ac1d3a32bf36e6b33780bf 100644 GIT binary patch delta 736 zcmeCI(VGKhtNfnoRLsbWBiCEd~2k%3`jKlh(RRv=#?*(1o8fuTx`fuW&=f#DZW zsNn?zL#Y7+!>a@a2CEqi4B`cIb_Lo1C76=D-CY>|xA&jfKhaPkj=jXw*OmPVI}@v_ z#e5-OTc8RjPZ!4!j_bC)j$926Jj~0bK0I*!vuXddyvGZ7voX!wsWPuuw3}7!2;UBE zljR#N)I?OzZR62dw~Z(0j>ANi{DA-b^2LeL>%Z1_?VjkSlE9!^;u=wsl30>zm0Xkx zq!^40j0|)Q%ykWnLJUl;jLoe~4YUmmtPBj^f9ALfbO1s_ZhlH;S|x4`^VV(1oZQNy zR?oP&DkP#L!q>+tIX_n~F(p4KRj(qqfPq0{;?*GE?8gQId!L8%yxO|WZqAjh8)Utl zBE&XL@m=7Z-?e6m+QyU=(cM44uC6he-Ezq}kzZCtvG?BWi#EPiZ?Y7xpE~HY)@!aJ zgF}FrWR;Z9$t`j#r++$rZPm?h*JJXo8);rJc)zq>_Wi0|L4FS5xh02p^K>545&8am zuC($E=Q~!;{JXh-7}vH;+{pDykyoYj*MkZM$0^sdHxaX@OSd7sqpnZ{0$4vQMTJvVuH(YBxMeEJ{e7hQIyt~+aX zFX4Y?@@&cnM$1d*9p3MHpq;o+D?-t~>gxKk&Htx4C2b9ydTHIqSr=`*&vKodek|MIC=0;5bduX4C&|2*^nHegC=mhZy_t z=rqo_NX3S20mU#8#fgxQL0-5?ANC1LZ|E_dzaVM0$*Q_tLTq3WiL662 zq(Q?4S5x$G7z|A3CqTw_5s0xoqj6#k#0FU*AtV!nr$JH0;Jj)9Apr!ABZDA`3G$I- z8jVgz$t=5iS(?m_wPKRL6g`WvBSGl^YpG=`c{cwGO8`?Ld~-5|79T1J!{%%fU7?0m{TEHEzOo72B?* zo5vqBT;$ts)dQKLD2K=`PMxS7Jj$vVr3H=`7*1sPn8GI|@r)$KuWrIOowmXAwr-T? zx5DEJpOAP?igPXaCZ`r$hM^FfglVWAo@tvM{6{cdYwP9AxwXc%=o&;dWFiZDL^FP? zX1XSoZP!$B+A!4$f{s;@VaNE-{F+&lvLIy%+jY5-diyGOWYN)mN9dcRI~ioQYxy{N zKKjGQp=g(}ueylZR Date: Thu, 2 Jul 2020 23:55:23 +0800 Subject: [PATCH 78/94] init branch --- .../HandyControlDemo_Net_40.csproj | 3 + .../HandyControlDemo_Net_GE45.csproj | 3 + .../Data/DemoInfo.json | 7 +- .../HandyControlDemo_Shared.projitems | 7 + .../Properties/Langs/Lang.Designer.cs | 13 +- .../Properties/Langs/Lang.en.resx | 3 + .../Properties/Langs/Lang.fa.resx | 3 + .../Properties/Langs/Lang.fr.resx | 3 + .../Properties/Langs/Lang.ko-KR.resx | 3 + .../Properties/Langs/Lang.pt-BR.resx | 3 + .../Properties/Langs/Lang.resx | 3 + .../Properties/Langs/Lang.ru.resx | 3 + .../Properties/Langs/Lang.tr.resx | 3 + .../Properties/Langs/LangProvider.cs | 13 +- .../Img/LeftMainContent/CheckboxList_16x.png | Bin 0 -> 134 bytes .../Controls/CheckComboBoxDemoCtl.xaml | 14 ++ .../Controls/CheckComboBoxDemoCtl.xaml.cs | 10 ++ .../Input/CheckComboBox/CheckComboBox.cs | 132 ++++++++++++++++ .../Input/CheckComboBox/CheckComboBoxItem.cs | 9 ++ .../HandyControl_Shared.projitems | 10 ++ .../Styles/Base/CheckComboBoxBaseStyle.xaml | 148 ++++++++++++++++++ .../Themes/Styles/CheckComboBox.xaml | 11 ++ .../Themes/Styles/Style.xaml | 1 + 23 files changed, 400 insertions(+), 5 deletions(-) create mode 100644 src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/CheckboxList_16x.png create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml create mode 100644 src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml.cs create mode 100644 src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs create mode 100644 src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBoxItem.cs create mode 100644 src/Shared/HandyControl_Shared/Themes/Styles/Base/CheckComboBoxBaseStyle.xaml create mode 100644 src/Shared/HandyControl_Shared/Themes/Styles/CheckComboBox.xaml diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj index c17c05bc9..de147646b 100644 --- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj +++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj @@ -223,6 +223,9 @@ Resources\Img\LeftMainContent\CheckBox_16x.png + + Resources\Img\LeftMainContent\CheckBoxList_16x.png + Resources\Img\LeftMainContent\ColorPalette_16x.png diff --git a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj index 0a009190d..30396196b 100644 --- a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj +++ b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj @@ -223,6 +223,9 @@ Resources\Img\LeftMainContent\CheckBox_16x.png + + Resources\Img\LeftMainContent\CheckBoxList_16x.png + Resources\Img\LeftMainContent\ColorPalette_16x.png diff --git a/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json b/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json index c1e8e21ed..46df4ea8d 100644 --- a/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json +++ b/src/Shared/HandyControlDemo_Shared/Data/DemoInfo.json @@ -31,8 +31,8 @@ [ "ToolBar", "ToolBarDemoCtl", "ToolBar_16x", "" ], [ "Border", "BorderDemoCtl", "BorderElement_16x", "" ], [ "Label", "LabelDemoCtl", "Label_16x", "" ], - [ "Frame", "FrameDemoCtl", "frame_16xLG", "1" ], - [ "Window", "NativeWindowDemoCtl", "WindowsForm_16x", "1" ], + [ "Frame", "FrameDemoCtl", "frame_16xLG", "" ], + [ "Window", "NativeWindowDemoCtl", "WindowsForm_16x", "" ], [ "Geometry", "GeometryDemoCtl", "Path_16x", "1" ] ] }, @@ -57,6 +57,7 @@ [ "NumericUpDown", "NumericUpDownDemoCtl", "NumericListBox_16x", "" ], [ "TextBox", "TextBoxDemoCtl", "TextBox_16x", "" ], [ "ComboBox", "ComboBoxDemoCtl", "ComboBox_16x", "" ], + [ "CheckComboBox", "CheckComboBoxDemoCtl", "CheckBoxList_16x", "1" ], [ "PasswordBox", "PasswordBoxDemoCtl", "PasswordBox_16x", "" ], [ "PinBox", "PinBoxDemoCtl", "Ellipsis_16x", "" ], [ "DatePicker", "DatePickerDemoCtl", "DatePicker_16x", "" ], @@ -104,7 +105,7 @@ [ "Notification", "NotificationDemoCtl", "Procedure_16x", "" ], [ "Dialog", "DialogDemoCtl", "Dialog_16x", "" ], [ "Screenshot", "ScreenshotDemoCtl", "WindowScreenshot_16x", "1" ], - [ "Window", "WindowDemoCtl", "WindowsForm_16x", "1" ] + [ "Window", "WindowDemoCtl", "WindowsForm_16x", "" ] ] }, { diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems index 1ae0db8cf..9e2f6ce1a 100644 --- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems +++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems @@ -113,6 +113,9 @@ ChatBubbleDemoCtl.xaml + + CheckComboBoxDemoCtl.xaml + CirclePanelDemoCtl.xaml @@ -598,6 +601,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs index 7f1a0b463..2762cd42f 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs @@ -266,7 +266,18 @@ public static string CheckBox { return ResourceManager.GetString("CheckBox", resourceCulture); } } - + + /// + /// 查找类似 多选组合框 的本地化字符串。 + /// + public static string CheckComboBox + { + get + { + return ResourceManager.GetString("CheckComboBox", resourceCulture); + } + } + /// /// 查找类似 圆形布局 的本地化字符串。 /// diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx index 090e5b577..13e032a4b 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx index 2edb26765..1ed78d51a 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx index 57a16fd2e..ea8e5781a 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx index 065145dc5..460d7c8e4 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ko-KR.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx index ac7835dcb..b4c05ff9a 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.pt-BR.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx index 34a270a9e..2eca16953 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx @@ -759,4 +759,7 @@ 几何形状 + + 多选组合框 + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx index 090e5b577..13e032a4b 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.ru.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx index b641cf039..deef133a5 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.tr.resx @@ -759,4 +759,7 @@ Geometry + + CheckComboBox + \ No newline at end of file diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs index 93ca4c9cb..e8118f39b 100644 --- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs +++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/LangProvider.cs @@ -60,7 +60,8 @@ private void UpdateLangs() OnPropertyChanged(nameof(ChatBubble)); OnPropertyChanged(nameof(Chatroom)); OnPropertyChanged(nameof(CheckBox)); - OnPropertyChanged(nameof(CirclePanel)); + OnPropertyChanged(nameof(CheckComboBox)); + OnPropertyChanged(nameof(CirclePanel)); OnPropertyChanged(nameof(Clear)); OnPropertyChanged(nameof(Click2Count)); OnPropertyChanged(nameof(Clock)); @@ -368,6 +369,11 @@ private void UpdateLangs() /// public string CheckBox => Lang.CheckBox; + /// + /// 查找类似 多选组合框 的本地化字符串。 + /// + public string CheckComboBox => Lang.CheckComboBox; + /// /// 查找类似 圆形布局 的本地化字符串。 /// @@ -1447,6 +1453,11 @@ public class LangKeys /// public static string CheckBox = nameof(CheckBox); + /// + /// 查找类似 多选组合框 的本地化字符串。 + /// + public static string CheckComboBox = nameof(CheckComboBox); + /// /// 查找类似 圆形布局 的本地化字符串。 /// diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/CheckboxList_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/CheckboxList_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..856bab796619301c850ac4bd37b1755acf3f2e53 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprD1P zi(^Pd+}jC?d<+UaM=GNK{}(?nNA~2ED=f|vJ8!AIosc3L!{G9cB|A@@tD$Gp1K&gH d!qrLsHmY6vYW8oJ%>kOh;OXk;vd$@?2>>qMDKr28 literal 0 HcmV?d00001 diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml new file mode 100644 index 000000000..6487bf797 --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml.cs new file mode 100644 index 000000000..44bbec678 --- /dev/null +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/CheckComboBoxDemoCtl.xaml.cs @@ -0,0 +1,10 @@ +namespace HandyControlDemo.UserControl +{ + public partial class CheckComboBoxDemoCtl + { + public CheckComboBoxDemoCtl() + { + InitializeComponent(); + } + } +} diff --git a/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs new file mode 100644 index 000000000..f7a87396a --- /dev/null +++ b/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs @@ -0,0 +1,132 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using HandyControl.Data; + +namespace HandyControl.Controls +{ + [TemplatePart(Name = ElementPanel, Type = typeof(Panel))] + [TemplatePart(Name = ElementSelectAll, Type = typeof(CheckComboBoxItem))] + public class CheckComboBox : ListBox + { + private const string ElementPanel = "PART_Panel"; + + private const string ElementSelectAll = "PART_SelectAll"; + + private Panel _panel; + + private Popup _popup; + + private CheckComboBoxItem _selectAllItem; + + private bool _isInternalAction; + + public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register( + "IsDropDownOpen", typeof(bool), typeof(CheckComboBox), new PropertyMetadata(ValueBoxes.FalseBox)); + + public bool IsDropDownOpen + { + get => (bool) GetValue(IsDropDownOpenProperty); + set => SetValue(IsDropDownOpenProperty, ValueBoxes.BooleanBox(value)); + } + + public static readonly DependencyProperty TagStyleProperty = DependencyProperty.Register( + "TagStyle", typeof(Style), typeof(CheckComboBox), new PropertyMetadata(default(Style))); + + public Style TagStyle + { + get => (Style) GetValue(TagStyleProperty); + set => SetValue(TagStyleProperty, value); + } + + public static readonly DependencyProperty ShowSelectAllButtonProperty = DependencyProperty.Register( + "ShowSelectAllButton", typeof(bool), typeof(CheckComboBox), new PropertyMetadata(ValueBoxes.FalseBox)); + + public bool ShowSelectAllButton + { + get => (bool) GetValue(ShowSelectAllButtonProperty); + set => SetValue(ShowSelectAllButtonProperty, ValueBoxes.BooleanBox(value)); + } + + public CheckComboBox() => AddHandler(Controls.Tag.ClosedEvent, new RoutedEventHandler(Tags_OnClosed)); + + private void Tags_OnClosed(object sender, RoutedEventArgs e) + { + if (e.OriginalSource is Tag tag && tag.Tag is CheckComboBoxItem checkComboBoxItem) + { + checkComboBoxItem.SetCurrentValue(IsSelectedProperty, false); + } + } + + public override void OnApplyTemplate() + { + if (_selectAllItem != null) + { + _selectAllItem.Selected -= SelectAllItem_Selected; + _selectAllItem.Unselected -= SelectAllItem_Unselected; + } + + base.OnApplyTemplate(); + + _panel = GetTemplateChild(ElementPanel) as Panel; + _selectAllItem = GetTemplateChild(ElementSelectAll) as CheckComboBoxItem; + if (_selectAllItem != null) + { + _selectAllItem.Selected += SelectAllItem_Selected; + _selectAllItem.Unselected += SelectAllItem_Unselected; + } + } + + private void SwitchAllItems(bool selected) + { + if (_isInternalAction) return; + _isInternalAction = true; + + foreach (CheckComboBoxItem item in ItemContainerGenerator.Items) + { + item.SetCurrentValue(ListBoxItem.IsSelectedProperty, selected); + } + + _isInternalAction = false; + UpdateTags(); + } + + private void SelectAllItem_Selected(object sender, RoutedEventArgs e) => SwitchAllItems(true); + + private void SelectAllItem_Unselected(object sender, RoutedEventArgs e) => SwitchAllItems(false); + + protected override void OnSelectionChanged(SelectionChangedEventArgs e) + { + UpdateTags(); + base.OnSelectionChanged(e); + } + + private void UpdateTags() + { + if (_isInternalAction) return; + + if (_selectAllItem != null) + { + _isInternalAction = true; + _selectAllItem.SetCurrentValue(IsSelectedProperty, SelectedItems.Count == Items.Count); + _isInternalAction = false; + } + + _panel.Children.Clear(); + + foreach (var item in SelectedItems) + { + if (ItemContainerGenerator.ContainerFromItem(item) is CheckComboBoxItem checkComboBoxItem) + { + var tag = new Tag + { + Style = TagStyle, + Content = checkComboBoxItem.Content, + Tag = checkComboBoxItem + }; + _panel.Children.Add(tag); + } + } + } + } +} diff --git a/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBoxItem.cs b/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBoxItem.cs new file mode 100644 index 000000000..67e0dd7ad --- /dev/null +++ b/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBoxItem.cs @@ -0,0 +1,9 @@ +using System.Windows.Controls; + +namespace HandyControl.Controls +{ + public class CheckComboBoxItem : ListBoxItem + { + + } +} diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems index e38ea1293..edf474c40 100644 --- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems +++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems @@ -31,6 +31,8 @@ + + @@ -440,6 +442,14 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/CheckComboBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/CheckComboBoxBaseStyle.xaml new file mode 100644 index 000000000..e60f945c5 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/CheckComboBoxBaseStyle.xaml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/CheckComboBox.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/CheckComboBox.xaml new file mode 100644 index 000000000..8656e2fcf --- /dev/null +++ b/src/Shared/HandyControl_Shared/Themes/Styles/CheckComboBox.xaml @@ -0,0 +1,11 @@ + + + + + + + - - + + - - + - + - + @@ -96,7 +151,7 @@ - + @@ -118,8 +173,22 @@ + + + + + + + + + + + + + - + + @@ -141,8 +210,412 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +