diff --git a/HandyControl/Controls/Attach/BorderElement.cs b/HandyControl/Controls/Attach/BorderElement.cs
index 05db296b..7ee4455b 100644
--- a/HandyControl/Controls/Attach/BorderElement.cs
+++ b/HandyControl/Controls/Attach/BorderElement.cs
@@ -1,4 +1,8 @@
using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using HandyControl.Data;
+using HandyControl.Tools.Converter;
namespace HandyControl.Controls
{
@@ -10,5 +14,37 @@ namespace HandyControl.Controls
public static void SetCornerRadius(DependencyObject element, CornerRadius value) => element.SetValue(CornerRadiusProperty, value);
public static CornerRadius GetCornerRadius(DependencyObject element) => (CornerRadius)element.GetValue(CornerRadiusProperty);
+
+ public static readonly DependencyProperty CircularProperty = DependencyProperty.RegisterAttached(
+ "Circular", typeof(bool), typeof(BorderElement), new PropertyMetadata(ValueBoxes.FalseBox, OnCircularChanged));
+
+ private static void OnCircularChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (d is Border border)
+ {
+ if ((bool)e.NewValue)
+ {
+ var binding = new MultiBinding
+ {
+ Converter = new BorderCircularConverter()
+ };
+ binding.Bindings.Add(new Binding(FrameworkElement.ActualWidthProperty.Name) {Source = border});
+ binding.Bindings.Add(new Binding(FrameworkElement.ActualHeightProperty.Name) { Source = border });
+ border.SetBinding(Border.CornerRadiusProperty, binding);
+ }
+ else
+ {
+ BindingOperations.ClearBinding(border, FrameworkElement.MinWidthProperty);
+ BindingOperations.ClearBinding(border, FrameworkElement.MinHeightProperty);
+ BindingOperations.ClearBinding(border, Border.CornerRadiusProperty);
+ }
+ }
+ }
+
+ public static void SetCircular(DependencyObject element, bool value)
+ => element.SetValue(CircularProperty, value);
+
+ public static bool GetCircular(DependencyObject element)
+ => (bool) element.GetValue(CircularProperty);
}
}
\ No newline at end of file
diff --git a/HandyControl/Controls/Attach/LinkElement.cs b/HandyControl/Controls/Attach/LinkElement.cs
index 5da5d111..d962952c 100644
--- a/HandyControl/Controls/Attach/LinkElement.cs
+++ b/HandyControl/Controls/Attach/LinkElement.cs
@@ -14,7 +14,7 @@ namespace HandyControl.Controls
{
if (d is UIElement element)
{
- CreateTrriger(element, (string) e.NewValue);
+ CreateTrigger(element, (string) e.NewValue);
}
}
@@ -27,7 +27,7 @@ namespace HandyControl.Controls
private static CommandBinding GetCommandBinding(DependencyObject element)
=> (CommandBinding) element.GetValue(CommandBindingProperty);
- private static void CreateTrriger(UIElement element, string link)
+ private static void CreateTrigger(UIElement element, string link)
{
element.CommandBindings.Remove(GetCommandBinding(element));
element.SetCurrentValue(CommandBindingProperty, DependencyProperty.UnsetValue);
diff --git a/HandyControl/Controls/Attach/VisualElement.cs b/HandyControl/Controls/Attach/VisualElement.cs
index 511922bc..2e748dae 100644
--- a/HandyControl/Controls/Attach/VisualElement.cs
+++ b/HandyControl/Controls/Attach/VisualElement.cs
@@ -12,6 +12,6 @@ namespace HandyControl.Controls
=> element.SetValue(HighlightBrushProperty, value);
public static Brush GetHighlightBrush(DependencyObject element)
- => (Brush) element.GetValue(HighlightBrushProperty);
+ => (Brush) element.GetValue(HighlightBrushProperty);
}
}
\ No newline at end of file
diff --git a/HandyControl/Controls/Base/IGravatarGenerator.cs b/HandyControl/Controls/Base/IGravatarGenerator.cs
new file mode 100644
index 00000000..37ddca34
--- /dev/null
+++ b/HandyControl/Controls/Base/IGravatarGenerator.cs
@@ -0,0 +1,7 @@
+namespace HandyControl.Controls
+{
+ public interface IGravatarGenerator
+ {
+ object GetGravatar(string id);
+ }
+}
\ No newline at end of file
diff --git a/HandyControl/Controls/Input/SearchBar.cs b/HandyControl/Controls/Input/SearchBar.cs
index 6243b3c8..5657ae1f 100644
--- a/HandyControl/Controls/Input/SearchBar.cs
+++ b/HandyControl/Controls/Input/SearchBar.cs
@@ -47,6 +47,7 @@ namespace HandyControl.Controls
_textBox = GetTemplateChild(ElementTextBox) as WatermarkTextBox;
if (_textBox != null)
{
+ _textBox.Text = Text;
SetBinding(TextProperty, new Binding(TextProperty.Name)
{
Source = _textBox,
@@ -191,4 +192,4 @@ namespace HandyControl.Controls
return result.Data;
}
}
-}
\ No newline at end of file
+}
diff --git a/HandyControl/Controls/Other/AnimationPath.cs b/HandyControl/Controls/Other/AnimationPath.cs
index ff126038..054dd802 100644
--- a/HandyControl/Controls/Other/AnimationPath.cs
+++ b/HandyControl/Controls/Other/AnimationPath.cs
@@ -5,6 +5,8 @@ using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using HandyControl.Data;
+using HandyControl.Expression.Drawing;
+using HandyControl.Tools.Extension;
namespace HandyControl.Controls
{
@@ -17,6 +19,11 @@ namespace HandyControl.Controls
///
private Storyboard _storyboard;
+ ///
+ /// 路径长度
+ ///
+ private double _pathLength;
+
///
/// 路径
///
@@ -47,8 +54,7 @@ namespace HandyControl.Controls
/// 路径长度
///
public static readonly DependencyProperty PathLengthProperty = DependencyProperty.Register(
- "PathLength", typeof(double), typeof(AnimationPath), new FrameworkPropertyMetadata(ValueBoxes.Double0Box,
- OnPropertiesChanged));
+ "PathLength", typeof(double), typeof(AnimationPath), new FrameworkPropertyMetadata(ValueBoxes.Double0Box, OnPropertiesChanged));
///
/// 路径长度
@@ -146,34 +152,47 @@ namespace HandyControl.Controls
remove => RemoveHandler(CompletedEvent, value);
}
+ ///
+ /// 更新路径
+ ///
private void UpdatePath()
{
if (!Duration.HasTimeSpan || !IsPlaying) return;
- StrokeDashOffset = PathLength;
+
+ _pathLength = PathLength > 0 ? PathLength : Data.GetTotalLength(new Size(ActualWidth, ActualHeight), StrokeThickness);
+
+ if (MathHelper.IsVerySmall(_pathLength)) return;
+
+ StrokeDashOffset = _pathLength;
StrokeDashArray = new DoubleCollection(new List
{
- PathLength,
- PathLength
+ _pathLength,
+ _pathLength
});
//定义动画
+ if (_storyboard != null)
+ {
+ _storyboard.Stop();
+ _storyboard.Completed -= Storyboard_Completed;
+ }
_storyboard = new Storyboard
{
RepeatBehavior = RepeatBehavior
};
- _storyboard.Completed += (s, e) => RaiseEvent(new RoutedEventArgs(CompletedEvent));
+ _storyboard.Completed += Storyboard_Completed;
var frames = new DoubleAnimationUsingKeyFrames();
//开始位置
var frame0 = new LinearDoubleKeyFrame
{
- Value = PathLength,
+ Value = _pathLength,
KeyTime = KeyTime.FromTimeSpan(TimeSpan.Zero)
};
//结束位置
var frame1 = new LinearDoubleKeyFrame
{
- Value = -PathLength,
+ Value = -_pathLength,
KeyTime = KeyTime.FromTimeSpan(Duration.TimeSpan)
};
frames.KeyFrames.Add(frame0);
@@ -185,5 +204,7 @@ namespace HandyControl.Controls
_storyboard.Begin();
}
+
+ private void Storyboard_Completed(object sender, EventArgs e) => RaiseEvent(new RoutedEventArgs(CompletedEvent));
}
}
\ No newline at end of file
diff --git a/HandyControl/Controls/Other/Badge.cs b/HandyControl/Controls/Other/Badge.cs
new file mode 100644
index 00000000..85e85c8b
--- /dev/null
+++ b/HandyControl/Controls/Other/Badge.cs
@@ -0,0 +1,64 @@
+using System.Windows;
+using System.Windows.Controls;
+using HandyControl.Data;
+
+namespace HandyControl.Controls
+{
+ ///
+ /// 标记
+ ///
+ public class Badge : ContentControl
+ {
+ public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
+ "Text", typeof(string), typeof(Badge), new PropertyMetadata(default(string)));
+
+ public string Text
+ {
+ get => (string) GetValue(TextProperty);
+ set => SetValue(TextProperty, value);
+ }
+
+ public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
+ "Value", typeof(int), typeof(Badge), new PropertyMetadata(ValueBoxes.Int0Box, OnValueChanged));
+
+ private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var ctl = (Badge) d;
+ var v = (int) e.NewValue;
+ ctl.Text = v <= ctl.Maximum ? v.ToString() : $"{ctl.Maximum}+";
+ }
+
+ public int Value
+ {
+ get => (int) GetValue(ValueProperty);
+ set => SetValue(ValueProperty, value);
+ }
+
+ public static readonly DependencyProperty IsDotProperty = DependencyProperty.Register(
+ "IsDot", typeof(bool), typeof(Badge), new PropertyMetadata(ValueBoxes.FalseBox));
+
+ public bool IsDot
+ {
+ get => (bool) GetValue(IsDotProperty);
+ set => SetValue(IsDotProperty, value);
+ }
+
+ public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(
+ "Maximum", typeof(int), typeof(Badge), new PropertyMetadata(ValueBoxes.Int99Box, OnValueChanged));
+
+ public int Maximum
+ {
+ get => (int) GetValue(MaximumProperty);
+ set => SetValue(MaximumProperty, value);
+ }
+
+ public static readonly DependencyProperty BadgeMarginProperty = DependencyProperty.Register(
+ "BadgeMargin", typeof(Thickness), typeof(Badge), new PropertyMetadata(default(Thickness)));
+
+ public Thickness BadgeMargin
+ {
+ get => (Thickness) GetValue(BadgeMarginProperty);
+ set => SetValue(BadgeMarginProperty, value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/HandyControl/Controls/Other/Dialog.cs b/HandyControl/Controls/Other/Dialog.cs
new file mode 100644
index 00000000..a5f18d03
--- /dev/null
+++ b/HandyControl/Controls/Other/Dialog.cs
@@ -0,0 +1,69 @@
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Input;
+using HandyControl.Interactivity;
+using HandyControl.Tools;
+
+namespace HandyControl.Controls
+{
+ public class Dialog : ContentControl
+ {
+ private Adorner _container;
+
+ public Dialog()
+ {
+ CommandBindings.Add(new CommandBinding(ControlCommands.Close, (s, e) => Close()));
+ }
+
+ public static Dialog Show(object content)
+ {
+ var dialog = new Dialog
+ {
+ Content = content
+ };
+
+ var window = VisualHelper.GetActiveWindow();
+ if (window != null)
+ {
+ var decorator = VisualHelper.GetChild(window);
+ if (decorator != null)
+ {
+ if (decorator.Child != null)
+ {
+ decorator.Child.IsEnabled = false;
+ }
+ var layer = decorator.AdornerLayer;
+ if (layer != null)
+ {
+ var container = new AdornerContainer(layer)
+ {
+ Child = dialog
+ };
+ dialog._container = container;
+ layer.Add(container);
+ }
+ }
+ }
+
+ return dialog;
+ }
+
+ public void Close()
+ {
+ var window = VisualHelper.GetActiveWindow();
+ if (window != null)
+ {
+ var decorator = VisualHelper.GetChild(window);
+ if (decorator != null)
+ {
+ if (decorator.Child != null)
+ {
+ decorator.Child.IsEnabled = true;
+ }
+ var layer = decorator.AdornerLayer;
+ layer?.Remove(_container);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HandyControl/Controls/Other/GotoTop.cs b/HandyControl/Controls/Other/GotoTop.cs
index 62d004a3..63df976c 100644
--- a/HandyControl/Controls/Other/GotoTop.cs
+++ b/HandyControl/Controls/Other/GotoTop.cs
@@ -30,7 +30,7 @@ namespace HandyControl.Controls
{
_scrollViewer.ScrollChanged -= ScrollViewer_ScrollChanged;
}
- _scrollViewer = VisualHelper.GetGetChild(obj);
+ _scrollViewer = VisualHelper.GetChild(obj);
if (_scrollViewer != null)
{
_scrollViewer.ScrollChanged += ScrollViewer_ScrollChanged;
diff --git a/HandyControl/Controls/Other/Gravatar.cs b/HandyControl/Controls/Other/Gravatar.cs
new file mode 100644
index 00000000..1ba9da89
--- /dev/null
+++ b/HandyControl/Controls/Other/Gravatar.cs
@@ -0,0 +1,51 @@
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+using HandyControl.Tools;
+
+namespace HandyControl.Controls
+{
+ public class Gravatar : ContentControl
+ {
+ public static readonly DependencyProperty GeneratorProperty = DependencyProperty.Register(
+ "Generator", typeof(IGravatarGenerator), typeof(Gravatar), new PropertyMetadata(new GithubGravatarGenerator()));
+
+ public IGravatarGenerator Generator
+ {
+ get => (IGravatarGenerator) GetValue(GeneratorProperty);
+ set => SetValue(GeneratorProperty, value);
+ }
+
+ public static readonly DependencyProperty IdProperty = DependencyProperty.Register(
+ "Id", typeof(string), typeof(Gravatar), new PropertyMetadata(default(string), OnIdChanged));
+
+ private static void OnIdChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var ctl = (Gravatar) d;
+ if (ctl.Source != null) return;
+ ctl.Content = ctl.Generator.GetGravatar((string)e.NewValue);
+ }
+
+ public string Id
+ {
+ get => (string) GetValue(IdProperty);
+ set => SetValue(IdProperty, value);
+ }
+
+
+ public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
+ "Source", typeof(ImageSource), typeof(Gravatar), new PropertyMetadata(default(ImageSource), OnSourceChanged));
+
+ private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ var ctl = (Gravatar)d;
+ ctl.Background = new ImageBrush((ImageSource)e.NewValue);
+ }
+
+ public ImageSource Source
+ {
+ get => (ImageSource) GetValue(SourceProperty);
+ set => SetValue(SourceProperty, value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/HandyControl/Controls/Panel/SimplePanel.cs b/HandyControl/Controls/Panel/SimplePanel.cs
new file mode 100644
index 00000000..7f774b8b
--- /dev/null
+++ b/HandyControl/Controls/Panel/SimplePanel.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace HandyControl.Controls
+{
+ ///
+ /// 用以代替Grid
+ ///
+ ///
+ /// 当不需要Grid的行、列分隔等功能时建议用此轻量级类代替
+ ///
+ public class SimplePanel : Panel
+ {
+ protected override Size MeasureOverride(Size availableSize)
+ {
+ var maxSize = new Size();
+ var children = InternalChildren;
+
+ for (int i = 0, count = children.Count; i < count; ++i)
+ {
+ var child = children[i];
+ if (child != null)
+ {
+ child.Measure(availableSize);
+ maxSize.Width = Math.Max(maxSize.Width, child.DesiredSize.Width);
+ maxSize.Height = Math.Max(maxSize.Height, child.DesiredSize.Height);
+ }
+ }
+
+ return maxSize;
+ }
+
+ protected override Size ArrangeOverride(Size arrangeSize)
+ {
+ foreach (UIElement child in InternalChildren)
+ {
+ child?.Arrange(new Rect(arrangeSize));
+ }
+
+ return arrangeSize;
+ }
+ }
+}
\ No newline at end of file
diff --git a/HandyControl/Controls/Other/CircleProgressBar.cs b/HandyControl/Controls/ProgressBar/CircleProgressBar.cs
similarity index 100%
rename from HandyControl/Controls/Other/CircleProgressBar.cs
rename to HandyControl/Controls/ProgressBar/CircleProgressBar.cs
diff --git a/HandyControl/Controls/ProgressBar/WaveProgressBar.cs b/HandyControl/Controls/ProgressBar/WaveProgressBar.cs
new file mode 100644
index 00000000..196665ca
--- /dev/null
+++ b/HandyControl/Controls/ProgressBar/WaveProgressBar.cs
@@ -0,0 +1,119 @@
+using System.Windows;
+using System.Windows.Controls.Primitives;
+using System.Windows.Media;
+using HandyControl.Data;
+using HandyControl.Expression.Drawing;
+
+namespace HandyControl.Controls
+{
+ ///
+ /// 波浪进度条
+ ///
+ [TemplatePart(Name = ElementWave, Type = typeof(FrameworkElement))]
+ [TemplatePart(Name = ElementClip, Type = typeof(FrameworkElement))]
+ public class WaveProgressBar : RangeBase
+ {
+ private const string ElementWave = "PART_Wave";
+
+ private const string ElementClip = "PART_Clip";
+
+ private FrameworkElement _waveElement;
+
+ private const double TranslateTransformMinY = -20;
+
+ private double _translateTransformYRange;
+
+ private TranslateTransform _translateTransform;
+
+ public WaveProgressBar() => Loaded += (s, e) => UpdateWave(Value);
+
+ static WaveProgressBar()
+ {
+ FocusableProperty.OverrideMetadata(typeof(WaveProgressBar),
+ new FrameworkPropertyMetadata(ValueBoxes.FalseBox));
+ MaximumProperty.OverrideMetadata(typeof(WaveProgressBar),
+ new FrameworkPropertyMetadata(ValueBoxes.Double100Box));
+ }
+
+ protected override void OnValueChanged(double oldValue, double newValue)
+ {
+ base.OnValueChanged(oldValue, newValue);
+
+ UpdateWave(newValue);
+ }
+
+ private void UpdateWave(double value)
+ {
+ if (_translateTransform == null || MathHelper.IsVerySmall(Maximum)) return;
+ var scale = 1 - value / Maximum;
+ var y = _translateTransformYRange * scale + TranslateTransformMinY;
+ _translateTransform.Y = y;
+ }
+
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ _waveElement = GetTemplateChild(ElementWave) as FrameworkElement;
+ var clipElement = GetTemplateChild(ElementClip) as FrameworkElement;
+
+ if (_waveElement != null && clipElement != null)
+ {
+ _translateTransform = new TranslateTransform
+ {
+ Y = clipElement.Height
+ };
+ _translateTransformYRange = clipElement.Height - TranslateTransformMinY;
+ _waveElement.RenderTransform = new TransformGroup
+ {
+ Children = {_translateTransform}
+ };
+ }
+ }
+
+ public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
+ "Text", typeof(string), typeof(WaveProgressBar), new PropertyMetadata(default(string)));
+
+ public string Text
+ {
+ get => (string)GetValue(TextProperty);
+ set => SetValue(TextProperty, value);
+ }
+
+ public static readonly DependencyProperty ShowTextProperty = DependencyProperty.Register(
+ "ShowText", typeof(bool), typeof(WaveProgressBar), new PropertyMetadata(ValueBoxes.TrueBox));
+
+ public bool ShowText
+ {
+ get => (bool)GetValue(ShowTextProperty);
+ set => SetValue(ShowTextProperty, value);
+ }
+
+ public static readonly DependencyProperty WaveFillProperty = DependencyProperty.Register(
+ "WaveFill", typeof(Brush), typeof(WaveProgressBar), new PropertyMetadata(default(Brush)));
+
+ public Brush WaveFill
+ {
+ get => (Brush) GetValue(WaveFillProperty);
+ set => SetValue(WaveFillProperty, value);
+ }
+
+ public static readonly DependencyProperty WaveThicknessProperty = DependencyProperty.Register(
+ "WaveThickness", typeof(double), typeof(WaveProgressBar), new PropertyMetadata(ValueBoxes.Double0Box));
+
+ public double WaveThickness
+ {
+ get => (double) GetValue(WaveThicknessProperty);
+ set => SetValue(WaveThicknessProperty, value);
+ }
+
+ public static readonly DependencyProperty WaveStrokeProperty = DependencyProperty.Register(
+ "WaveStroke", typeof(Brush), typeof(WaveProgressBar), new PropertyMetadata(default(Brush)));
+
+ public Brush WaveStroke
+ {
+ get => (Brush) GetValue(WaveStrokeProperty);
+ set => SetValue(WaveStrokeProperty, value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/HandyControl/Data/ValueBoxes.cs b/HandyControl/Data/ValueBoxes.cs
index b2fb35dc..d53cba75 100644
--- a/HandyControl/Data/ValueBoxes.cs
+++ b/HandyControl/Data/ValueBoxes.cs
@@ -31,6 +31,8 @@
internal static object Int5Box = 5;
+ internal static object Int99Box = 99;
+
internal static object BooleanBox(bool value) => value ? TrueBox : FalseBox;
}
}
\ No newline at end of file
diff --git a/HandyControl/HandyControl.csproj b/HandyControl/HandyControl.csproj
index efbf174e..a5a8e24d 100644
--- a/HandyControl/HandyControl.csproj
+++ b/HandyControl/HandyControl.csproj
@@ -86,6 +86,7 @@
+
@@ -108,15 +109,20 @@
+
+
+
+
+
-
+
@@ -174,8 +180,12 @@
+
+
+
+
@@ -356,6 +366,14 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -380,10 +398,18 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -428,6 +454,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -436,6 +466,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/HandyControl/Interactivity/AdornerContainer.cs b/HandyControl/Interactivity/AdornerContainer.cs
index 4ffc4f93..4fea569d 100644
--- a/HandyControl/Interactivity/AdornerContainer.cs
+++ b/HandyControl/Interactivity/AdornerContainer.cs
@@ -14,8 +14,7 @@ namespace HandyControl.Interactivity
public UIElement Child
{
- get =>
- _child;
+ get => _child;
set
{
AddVisualChild(value);
diff --git a/HandyControl/Properties/Langs/Lang.en.resx b/HandyControl/Properties/Langs/Lang.en.resx
index b5f9a98b..28b6a0dc 100644
--- a/HandyControl/Properties/Langs/Lang.en.resx
+++ b/HandyControl/Properties/Langs/Lang.en.resx
@@ -1,95 +1,76 @@
+ Microsoft ResX Schema
+
+ Version 1.3
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ text/microsoft-resx
+ 1.3
+ System.Resources.ResXResourceReader, System.Windows.Forms, ...
+ System.Resources.ResXResourceWriter, System.Windows.Forms, ...
+ this is my long string
+ Blue
+
+ [base64 mime encoded serialized .NET Framework object]
+
+
+ [base64 mime encoded string representing a byte array form of the .NET Framework object]
+
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
@@ -108,13 +89,13 @@
text/microsoft-resx
- 2.0
+ 1.3
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Confirm
diff --git a/HandyControl/Themes/Basic/Converters.xaml b/HandyControl/Themes/Basic/Converters.xaml
index 8a4d418f..57809fe9 100644
--- a/HandyControl/Themes/Basic/Converters.xaml
+++ b/HandyControl/Themes/Basic/Converters.xaml
@@ -15,5 +15,7 @@
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Badge.xaml b/HandyControl/Themes/Styles/Badge.xaml
new file mode 100644
index 00000000..5a1cc0f3
--- /dev/null
+++ b/HandyControl/Themes/Styles/Badge.xaml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Base/BadgeBaseStyle.xaml b/HandyControl/Themes/Styles/Base/BadgeBaseStyle.xaml
new file mode 100644
index 00000000..d1e7d26e
--- /dev/null
+++ b/HandyControl/Themes/Styles/Base/BadgeBaseStyle.xaml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Base/DialogBaseStyle.xaml b/HandyControl/Themes/Styles/Base/DialogBaseStyle.xaml
new file mode 100644
index 00000000..dc3c8493
--- /dev/null
+++ b/HandyControl/Themes/Styles/Base/DialogBaseStyle.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml b/HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml
new file mode 100644
index 00000000..861062d2
--- /dev/null
+++ b/HandyControl/Themes/Styles/Base/GravatarBaseStyle.xaml
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml b/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml
index df26dbfe..1619a5a2 100644
--- a/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml
+++ b/HandyControl/Themes/Styles/Base/ProgressBarBaseStyle.xaml
@@ -5,6 +5,7 @@
+
@@ -70,13 +71,12 @@
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Border.xaml b/HandyControl/Themes/Styles/Border.xaml
index 4163cef3..27557b46 100644
--- a/HandyControl/Themes/Styles/Border.xaml
+++ b/HandyControl/Themes/Styles/Border.xaml
@@ -1,6 +1,11 @@
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:controls="clr-namespace:HandyControl.Controls">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Dialog.xaml b/HandyControl/Themes/Styles/Dialog.xaml
new file mode 100644
index 00000000..d74f807e
--- /dev/null
+++ b/HandyControl/Themes/Styles/Dialog.xaml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Gravatar.xaml b/HandyControl/Themes/Styles/Gravatar.xaml
new file mode 100644
index 00000000..7c400cdb
--- /dev/null
+++ b/HandyControl/Themes/Styles/Gravatar.xaml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/ProgressBar.xaml b/HandyControl/Themes/Styles/ProgressBar.xaml
index ce272123..117fc66b 100644
--- a/HandyControl/Themes/Styles/ProgressBar.xaml
+++ b/HandyControl/Themes/Styles/ProgressBar.xaml
@@ -196,6 +196,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/Base/BadgeBaseStyle.xaml b/Net40/HandyControl_Net40/Themes/Styles/Base/BadgeBaseStyle.xaml
new file mode 100644
index 00000000..d1e7d26e
--- /dev/null
+++ b/Net40/HandyControl_Net40/Themes/Styles/Base/BadgeBaseStyle.xaml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/Base/ComboBoxBaseStyle.xaml b/Net40/HandyControl_Net40/Themes/Styles/Base/ComboBoxBaseStyle.xaml
index ad9487c0..5bb899f8 100644
--- a/Net40/HandyControl_Net40/Themes/Styles/Base/ComboBoxBaseStyle.xaml
+++ b/Net40/HandyControl_Net40/Themes/Styles/Base/ComboBoxBaseStyle.xaml
@@ -41,6 +41,7 @@
-
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/Base/GravatarBaseStyle.xaml b/Net40/HandyControl_Net40/Themes/Styles/Base/GravatarBaseStyle.xaml
new file mode 100644
index 00000000..342c8179
--- /dev/null
+++ b/Net40/HandyControl_Net40/Themes/Styles/Base/GravatarBaseStyle.xaml
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/Base/ProgressBarBaseStyle.xaml b/Net40/HandyControl_Net40/Themes/Styles/Base/ProgressBarBaseStyle.xaml
index df26dbfe..1619a5a2 100644
--- a/Net40/HandyControl_Net40/Themes/Styles/Base/ProgressBarBaseStyle.xaml
+++ b/Net40/HandyControl_Net40/Themes/Styles/Base/ProgressBarBaseStyle.xaml
@@ -5,6 +5,7 @@
+
@@ -70,13 +71,12 @@
+
+
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/Border.xaml b/Net40/HandyControl_Net40/Themes/Styles/Border.xaml
index 4163cef3..3c14150f 100644
--- a/Net40/HandyControl_Net40/Themes/Styles/Border.xaml
+++ b/Net40/HandyControl_Net40/Themes/Styles/Border.xaml
@@ -1,5 +1,10 @@
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:controls="clr-namespace:HandyControl.Controls">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/Gravatar.xaml b/Net40/HandyControl_Net40/Themes/Styles/Gravatar.xaml
new file mode 100644
index 00000000..4384bd2d
--- /dev/null
+++ b/Net40/HandyControl_Net40/Themes/Styles/Gravatar.xaml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControl_Net40/Themes/Styles/ProgressBar.xaml b/Net40/HandyControl_Net40/Themes/Styles/ProgressBar.xaml
index ce272123..117fc66b 100644
--- a/Net40/HandyControl_Net40/Themes/Styles/ProgressBar.xaml
+++ b/Net40/HandyControl_Net40/Themes/Styles/ProgressBar.xaml
@@ -196,6 +196,26 @@
+
+
+
+
+
+
+
+
+
+