From 979b3326a7d3fb88372f410406bac410531e0766 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 25 Nov 2018 22:41:35 +0800 Subject: [PATCH] add OutlineText --- .../Controls/{ => Input}/WatermarkTextBox.cs | 0 .../Controls/{ => Other}/AnimationPath.cs | 0 HandyControl/Controls/{ => Other}/Carousel.cs | 0 .../Controls/{ => Other}/CirclePanel.cs | 0 .../Controls/{ => Other}/CircleProgressBar.cs | 0 .../Controls/{ => Other}/ColorPicker.cs | 0 HandyControl/Controls/{ => Other}/GifImage.cs | 0 HandyControl/Controls/{ => Other}/Growl.cs | 0 .../Controls/{ => Other}/ISingleOpen.cs | 0 .../Controls/{ => Other}/ImageViewer.cs | 0 .../Controls/{ => Other}/InternalCanvas.cs | 0 .../Controls/{ => Other}/Pagination.cs | 0 .../Controls/{ => Other}/ScrollViewer.cs | 0 .../TransitioningContentControl.cs | 0 HandyControl/Controls/Text/OutlineText.cs | 236 ++++++++++++++++++ HandyControl/Controls/Text/StackText.cs | 9 + HandyControl/HandyControl.csproj | 30 +-- HandyControlDemo/Data/MessageToken.cs | 2 + HandyControlDemo/Data/MessageToken.tt | 3 +- HandyControlDemo/HandyControlDemo.csproj | 7 + .../Properties/Langs/Lang.Designer.cs | 9 + .../Properties/Langs/Lang.en.resx | 3 + HandyControlDemo/Properties/Langs/Lang.resx | 3 + .../Controls/OutlineTextDemoCtl.xaml | 16 ++ .../Controls/OutlineTextDemoCtl.xaml.cs | 10 + .../UserControl/Main/LeftMainContent.xaml | 5 + README.md | 8 +- Resources/OutlineText.png | Bin 0 -> 38722 bytes 28 files changed, 324 insertions(+), 17 deletions(-) rename HandyControl/Controls/{ => Input}/WatermarkTextBox.cs (100%) rename HandyControl/Controls/{ => Other}/AnimationPath.cs (100%) rename HandyControl/Controls/{ => Other}/Carousel.cs (100%) rename HandyControl/Controls/{ => Other}/CirclePanel.cs (100%) rename HandyControl/Controls/{ => Other}/CircleProgressBar.cs (100%) rename HandyControl/Controls/{ => Other}/ColorPicker.cs (100%) rename HandyControl/Controls/{ => Other}/GifImage.cs (100%) rename HandyControl/Controls/{ => Other}/Growl.cs (100%) rename HandyControl/Controls/{ => Other}/ISingleOpen.cs (100%) rename HandyControl/Controls/{ => Other}/ImageViewer.cs (100%) rename HandyControl/Controls/{ => Other}/InternalCanvas.cs (100%) rename HandyControl/Controls/{ => Other}/Pagination.cs (100%) rename HandyControl/Controls/{ => Other}/ScrollViewer.cs (100%) rename HandyControl/Controls/{ => Other}/TransitioningContentControl.cs (100%) create mode 100644 HandyControl/Controls/Text/OutlineText.cs create mode 100644 HandyControl/Controls/Text/StackText.cs create mode 100644 HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml create mode 100644 HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml.cs create mode 100644 Resources/OutlineText.png diff --git a/HandyControl/Controls/WatermarkTextBox.cs b/HandyControl/Controls/Input/WatermarkTextBox.cs similarity index 100% rename from HandyControl/Controls/WatermarkTextBox.cs rename to HandyControl/Controls/Input/WatermarkTextBox.cs diff --git a/HandyControl/Controls/AnimationPath.cs b/HandyControl/Controls/Other/AnimationPath.cs similarity index 100% rename from HandyControl/Controls/AnimationPath.cs rename to HandyControl/Controls/Other/AnimationPath.cs diff --git a/HandyControl/Controls/Carousel.cs b/HandyControl/Controls/Other/Carousel.cs similarity index 100% rename from HandyControl/Controls/Carousel.cs rename to HandyControl/Controls/Other/Carousel.cs diff --git a/HandyControl/Controls/CirclePanel.cs b/HandyControl/Controls/Other/CirclePanel.cs similarity index 100% rename from HandyControl/Controls/CirclePanel.cs rename to HandyControl/Controls/Other/CirclePanel.cs diff --git a/HandyControl/Controls/CircleProgressBar.cs b/HandyControl/Controls/Other/CircleProgressBar.cs similarity index 100% rename from HandyControl/Controls/CircleProgressBar.cs rename to HandyControl/Controls/Other/CircleProgressBar.cs diff --git a/HandyControl/Controls/ColorPicker.cs b/HandyControl/Controls/Other/ColorPicker.cs similarity index 100% rename from HandyControl/Controls/ColorPicker.cs rename to HandyControl/Controls/Other/ColorPicker.cs diff --git a/HandyControl/Controls/GifImage.cs b/HandyControl/Controls/Other/GifImage.cs similarity index 100% rename from HandyControl/Controls/GifImage.cs rename to HandyControl/Controls/Other/GifImage.cs diff --git a/HandyControl/Controls/Growl.cs b/HandyControl/Controls/Other/Growl.cs similarity index 100% rename from HandyControl/Controls/Growl.cs rename to HandyControl/Controls/Other/Growl.cs diff --git a/HandyControl/Controls/ISingleOpen.cs b/HandyControl/Controls/Other/ISingleOpen.cs similarity index 100% rename from HandyControl/Controls/ISingleOpen.cs rename to HandyControl/Controls/Other/ISingleOpen.cs diff --git a/HandyControl/Controls/ImageViewer.cs b/HandyControl/Controls/Other/ImageViewer.cs similarity index 100% rename from HandyControl/Controls/ImageViewer.cs rename to HandyControl/Controls/Other/ImageViewer.cs diff --git a/HandyControl/Controls/InternalCanvas.cs b/HandyControl/Controls/Other/InternalCanvas.cs similarity index 100% rename from HandyControl/Controls/InternalCanvas.cs rename to HandyControl/Controls/Other/InternalCanvas.cs diff --git a/HandyControl/Controls/Pagination.cs b/HandyControl/Controls/Other/Pagination.cs similarity index 100% rename from HandyControl/Controls/Pagination.cs rename to HandyControl/Controls/Other/Pagination.cs diff --git a/HandyControl/Controls/ScrollViewer.cs b/HandyControl/Controls/Other/ScrollViewer.cs similarity index 100% rename from HandyControl/Controls/ScrollViewer.cs rename to HandyControl/Controls/Other/ScrollViewer.cs diff --git a/HandyControl/Controls/TransitioningContentControl.cs b/HandyControl/Controls/Other/TransitioningContentControl.cs similarity index 100% rename from HandyControl/Controls/TransitioningContentControl.cs rename to HandyControl/Controls/Other/TransitioningContentControl.cs diff --git a/HandyControl/Controls/Text/OutlineText.cs b/HandyControl/Controls/Text/OutlineText.cs new file mode 100644 index 00000000..42161c24 --- /dev/null +++ b/HandyControl/Controls/Text/OutlineText.cs @@ -0,0 +1,236 @@ +using System; +using System.ComponentModel; +using System.Globalization; +using System.Windows; +using System.Windows.Documents; +using System.Windows.Media; +using HandyControl.Data; + +namespace HandyControl.Controls +{ + public class OutlineText : FrameworkElement + { + private FormattedText _formattedText; + + private Geometry _textGeometry; + + static OutlineText() + { + SnapsToDevicePixelsProperty.OverrideMetadata(typeof(OutlineText), new FrameworkPropertyMetadata(ValueBoxes.TrueBox)); + UseLayoutRoundingProperty.OverrideMetadata(typeof(OutlineText), new FrameworkPropertyMetadata(ValueBoxes.TrueBox)); + } + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register( + "Text", typeof(string), typeof(OutlineText), new FrameworkPropertyMetadata( + string.Empty, + FrameworkPropertyMetadataOptions.AffectsMeasure | + FrameworkPropertyMetadataOptions.AffectsRender, OnFormattedTextInvalidated)); + + public string Text + { + get => (string) GetValue(TextProperty); + set => SetValue(TextProperty, value); + } + + public static readonly DependencyProperty TextAlignmentProperty = DependencyProperty.Register( + "TextAlignment", typeof(TextAlignment), typeof(OutlineText), + new PropertyMetadata(default(TextAlignment), OnFormattedTextUpdated)); + + public TextAlignment TextAlignment + { + get => (TextAlignment) GetValue(TextAlignmentProperty); + set => SetValue(TextAlignmentProperty, value); + } + + public static readonly DependencyProperty TextTrimmingProperty = DependencyProperty.Register( + "TextTrimming", typeof(TextTrimming), typeof(OutlineText), + new PropertyMetadata(default(TextTrimming), OnFormattedTextInvalidated)); + + public TextTrimming TextTrimming + { + get => (TextTrimming) GetValue(TextTrimmingProperty); + set => SetValue(TextTrimmingProperty, value); + } + + public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register( + "TextWrapping", typeof(TextWrapping), typeof(OutlineText), + new PropertyMetadata(TextWrapping.NoWrap, OnFormattedTextInvalidated)); + + public TextWrapping TextWrapping + { + get => (TextWrapping) GetValue(TextWrappingProperty); + set => SetValue(TextWrappingProperty, value); + } + + public static readonly DependencyProperty FillProperty = DependencyProperty.Register( + "Fill", typeof(Brush), typeof(OutlineText), new PropertyMetadata(Brushes.Black, OnFormattedTextUpdated)); + + public Brush Fill + { + get => (Brush) GetValue(FillProperty); + set => SetValue(FillProperty, value); + } + + public static readonly DependencyProperty StrokeProperty = DependencyProperty.Register( + "Stroke", typeof(Brush), typeof(OutlineText), new PropertyMetadata(Brushes.Black, OnFormattedTextUpdated)); + + public Brush Stroke + { + get => (Brush) GetValue(StrokeProperty); + set => SetValue(StrokeProperty, value); + } + + public static readonly DependencyProperty StrokeThicknessProperty = DependencyProperty.Register( + "StrokeThickness", typeof(double), typeof(OutlineText), new PropertyMetadata(ValueBoxes.Double0Box, OnFormattedTextUpdated)); + + public double StrokeThickness + { + get => (double) GetValue(StrokeThicknessProperty); + set => SetValue(StrokeThicknessProperty, value); + } + + public static readonly DependencyProperty FontFamilyProperty = TextElement.FontFamilyProperty.AddOwner( + typeof(OutlineText), + new FrameworkPropertyMetadata(OnFormattedTextUpdated)); + + public FontFamily FontFamily + { + get => (FontFamily)GetValue(FontFamilyProperty); + set => SetValue(FontFamilyProperty, value); + } + + public static readonly DependencyProperty FontSizeProperty = TextElement.FontSizeProperty.AddOwner( + typeof(OutlineText), + new FrameworkPropertyMetadata(OnFormattedTextUpdated)); + + [TypeConverter(typeof(FontSizeConverter))] + public double FontSize + { + get => (double)GetValue(FontSizeProperty); + set => SetValue(FontSizeProperty, value); + } + + public static readonly DependencyProperty FontStretchProperty = TextElement.FontStretchProperty.AddOwner( + typeof(OutlineText), + new FrameworkPropertyMetadata(OnFormattedTextUpdated)); + + public FontStretch FontStretch + { + get => (FontStretch)GetValue(FontStretchProperty); + set => SetValue(FontStretchProperty, value); + } + + public static readonly DependencyProperty FontStyleProperty = TextElement.FontStyleProperty.AddOwner( + typeof(OutlineText), + new FrameworkPropertyMetadata(OnFormattedTextUpdated)); + + public FontStyle FontStyle + { + get => (FontStyle)GetValue(FontStyleProperty); + set => SetValue(FontStyleProperty, value); + } + + public static readonly DependencyProperty FontWeightProperty = TextElement.FontWeightProperty.AddOwner( + typeof(OutlineText), + new FrameworkPropertyMetadata(OnFormattedTextUpdated)); + + public FontWeight FontWeight + { + get => (FontWeight)GetValue(FontWeightProperty); + set => SetValue(FontWeightProperty, value); + } + + protected override void OnRender(DrawingContext drawingContext) + { + EnsureGeometry(); + drawingContext.DrawGeometry(Fill, new Pen(Stroke, StrokeThickness), _textGeometry); + } + + private void EnsureFormattedText() + { + if (_formattedText != null || Text == null) + { + return; + } + + var source = PresentationSource.FromVisual(this); + var dpi = 1.0; + if (source?.CompositionTarget != null) + { + dpi = 96.0 * source.CompositionTarget.TransformToDevice.M11 / 96.0; + } + + _formattedText = new FormattedText( + Text, + CultureInfo.CurrentUICulture, + FlowDirection, + new Typeface(FontFamily, FontStyle, FontWeight, FontStretch), + FontSize, Fill, dpi); + + UpdateFormattedText(); + } + + private void EnsureGeometry() + { + if (_textGeometry != null) + { + return; + } + + EnsureFormattedText(); + _textGeometry = _formattedText.BuildGeometry(new Point(0, 0)); + } + + private void UpdateFormattedText() + { + if (_formattedText == null) + { + return; + } + + _formattedText.MaxLineCount = TextWrapping == TextWrapping.NoWrap ? 1 : int.MaxValue; + _formattedText.TextAlignment = TextAlignment; + _formattedText.Trimming = TextTrimming; + + _formattedText.SetFontSize(FontSize); + _formattedText.SetFontStyle(FontStyle); + _formattedText.SetFontWeight(FontWeight); + _formattedText.SetFontFamily(FontFamily); + _formattedText.SetFontStretch(FontStretch); + } + + private static void OnFormattedTextUpdated(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var outlinedTextBlock = (OutlineText)d; + outlinedTextBlock.UpdateFormattedText(); + outlinedTextBlock._textGeometry = null; + + outlinedTextBlock.InvalidateMeasure(); + outlinedTextBlock.InvalidateVisual(); + } + + private static void OnFormattedTextInvalidated(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var outlinedTextBlock = (OutlineText)d; + outlinedTextBlock._formattedText = null; + outlinedTextBlock._textGeometry = null; + + outlinedTextBlock.InvalidateMeasure(); + outlinedTextBlock.InvalidateVisual(); + } + + protected override Size MeasureOverride(Size availableSize) + { + EnsureFormattedText(); + + // constrain the formatted text according to the available size + // the Math.Min call is important - without this constraint (which seems arbitrary, but is the maximum allowable text width), things blow up when availableSize is infinite in both directions + // the Math.Max call is to ensure we don't hit zero, which will cause MaxTextHeight to throw + _formattedText.MaxTextWidth = Math.Min(3579139, availableSize.Width); + _formattedText.MaxTextHeight = Math.Max(0.0001d, availableSize.Height); + + // return the desired size + return new Size(_formattedText.Width, _formattedText.Height); + } + } +} \ No newline at end of file diff --git a/HandyControl/Controls/Text/StackText.cs b/HandyControl/Controls/Text/StackText.cs new file mode 100644 index 00000000..1429bd10 --- /dev/null +++ b/HandyControl/Controls/Text/StackText.cs @@ -0,0 +1,9 @@ +using System.Windows; + +namespace HandyControl.Controls +{ + public class StackText : FrameworkElement + { + + } +} \ No newline at end of file diff --git a/HandyControl/HandyControl.csproj b/HandyControl/HandyControl.csproj index 9f632c61..7ce2855a 100644 --- a/HandyControl/HandyControl.csproj +++ b/HandyControl/HandyControl.csproj @@ -33,7 +33,7 @@ bin\Release\HandyControl.xml - + @@ -46,37 +46,39 @@ - - - - + + + + + + - - + + - + - + - + - + - + @@ -140,8 +142,8 @@ - - + + diff --git a/HandyControlDemo/Data/MessageToken.cs b/HandyControlDemo/Data/MessageToken.cs index 8f205798..d5d3ac9a 100644 --- a/HandyControlDemo/Data/MessageToken.cs +++ b/HandyControlDemo/Data/MessageToken.cs @@ -56,6 +56,8 @@ public static readonly string GifImageDemoCtl = nameof(GifImageDemoCtl); + public static readonly string OutlineTextDemoCtl = nameof(OutlineTextDemoCtl); + public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl); public static readonly string ToggleButtonDemoCtl = nameof(ToggleButtonDemoCtl); diff --git a/HandyControlDemo/Data/MessageToken.tt b/HandyControlDemo/Data/MessageToken.tt index 9bbcd97a..f94dcf6c 100644 --- a/HandyControlDemo/Data/MessageToken.tt +++ b/HandyControlDemo/Data/MessageToken.tt @@ -30,7 +30,8 @@ var controlList = new List "CalendarWithClockDemoCtl", "SearchBarDemoCtl", "TagDemoCtl", - "GifImageDemoCtl" + "GifImageDemoCtl", + "OutlineTextDemoCtl" }; var styleList = new List { diff --git a/HandyControlDemo/HandyControlDemo.csproj b/HandyControlDemo/HandyControlDemo.csproj index 275c70b5..70085e16 100644 --- a/HandyControlDemo/HandyControlDemo.csproj +++ b/HandyControlDemo/HandyControlDemo.csproj @@ -129,6 +129,9 @@ DateTimePickerDemoCtl.xaml + + OutlineTextDemoCtl.xaml + GifImageDemoCtl.xaml @@ -386,6 +389,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/HandyControlDemo/Properties/Langs/Lang.Designer.cs b/HandyControlDemo/Properties/Langs/Lang.Designer.cs index 4c27efc1..ca857118 100644 --- a/HandyControlDemo/Properties/Langs/Lang.Designer.cs +++ b/HandyControlDemo/Properties/Langs/Lang.Designer.cs @@ -627,6 +627,15 @@ namespace HandyControlDemo.Properties.Langs { } } + /// + /// 查找类似 轮廓文本 的本地化字符串。 + /// + public static string OutlineText { + get { + return ResourceManager.GetString("OutlineText", resourceCulture); + } + } + /// /// 查找类似 页码条 的本地化字符串。 /// diff --git a/HandyControlDemo/Properties/Langs/Lang.en.resx b/HandyControlDemo/Properties/Langs/Lang.en.resx index 8e97e24f..a8a342e1 100644 --- a/HandyControlDemo/Properties/Langs/Lang.en.resx +++ b/HandyControlDemo/Properties/Langs/Lang.en.resx @@ -432,4 +432,7 @@ GifImage + + OutlineText + \ No newline at end of file diff --git a/HandyControlDemo/Properties/Langs/Lang.resx b/HandyControlDemo/Properties/Langs/Lang.resx index a81739de..4b8d318a 100644 --- a/HandyControlDemo/Properties/Langs/Lang.resx +++ b/HandyControlDemo/Properties/Langs/Lang.resx @@ -412,4 +412,7 @@ Gif图片 + + 轮廓文本 + \ No newline at end of file diff --git a/HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml b/HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml new file mode 100644 index 00000000..66a4f89f --- /dev/null +++ b/HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml.cs b/HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml.cs new file mode 100644 index 00000000..1e637136 --- /dev/null +++ b/HandyControlDemo/UserControl/Controls/OutlineTextDemoCtl.xaml.cs @@ -0,0 +1,10 @@ +namespace HandyControlDemo.UserControl +{ + public partial class OutlineTextDemoCtl + { + public OutlineTextDemoCtl() + { + InitializeComponent(); + } + } +} diff --git a/HandyControlDemo/UserControl/Main/LeftMainContent.xaml b/HandyControlDemo/UserControl/Main/LeftMainContent.xaml index 5e53f45a..6e8664fb 100644 --- a/HandyControlDemo/UserControl/Main/LeftMainContent.xaml +++ b/HandyControlDemo/UserControl/Main/LeftMainContent.xaml @@ -204,6 +204,11 @@ + + + + + diff --git a/README.md b/README.md index 95f1325f..e3b7c4a3 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ ## Latest examples +### OutlineText + +![OutlineText](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/OutlineText.png) + ### Tag ![Tag](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/Tag.png) @@ -22,12 +26,12 @@ ![CircleProgressBar](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/CircleProgressBar.png) +## History publication + ### DataGrid ![DataGrid](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/DataGrid.png) -## History publication - ### Now you can switch to dark theme ![dark theme](https://raw.githubusercontent.com/NaBian/HandyControl/master/Resources/DarkTheme.png) diff --git a/Resources/OutlineText.png b/Resources/OutlineText.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5ec7e1c4c1a0c9ff22fb7048f55b65190af17d GIT binary patch literal 38722 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