From 537f0e5761f1e9f3e65f575dfbeb19e02fb304b2 Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Mon, 26 Aug 2019 23:28:58 +0800
Subject: [PATCH] add TextBlockAttach
---
.../UserControl/Styles/TextBlockDemoCtl.xaml | 2 +-
.../Controls/Attach/TextBlockAttach.cs | 53 +++++++++++++++++++
.../HandyControl_Shared.projitems | 1 +
3 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 src/Shared/HandyControl_Shared/Controls/Attach/TextBlockAttach.cs
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/TextBlockDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/TextBlockDemoCtl.xaml
index 55dde26f..42370c81 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Styles/TextBlockDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Styles/TextBlockDemoCtl.xaml
@@ -42,7 +42,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Controls/Attach/TextBlockAttach.cs b/src/Shared/HandyControl_Shared/Controls/Attach/TextBlockAttach.cs
new file mode 100644
index 00000000..9311da19
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/Attach/TextBlockAttach.cs
@@ -0,0 +1,53 @@
+using System.Windows;
+using System.Windows.Controls;
+using HandyControl.Data;
+
+namespace HandyControl.Controls
+{
+ public class TextBlockAttach
+ {
+ public static readonly DependencyProperty AutoTooltipProperty = DependencyProperty.RegisterAttached(
+ "AutoTooltip", typeof(bool), typeof(TextBlockAttach), new PropertyMetadata(ValueBoxes.FalseBox, OnAutoTooltipChanged));
+
+ private static void OnAutoTooltipChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (d is TextBlock ctl)
+ {
+ if ((bool)e.NewValue)
+ {
+ ctl.TextTrimming = TextTrimming.WordEllipsis;
+ UpdateTooltip(ctl);
+ ctl.SizeChanged += TextBlock_SizeChanged;
+ }
+ else
+ {
+ ctl.ClearValue(TextBlock.TextTrimmingProperty);
+ ctl.SizeChanged -= TextBlock_SizeChanged;
+ }
+ }
+ }
+
+ public static void SetAutoTooltip(DependencyObject element, bool value)
+ => element.SetValue(AutoTooltipProperty, value);
+
+ public static bool GetAutoTooltip(DependencyObject element)
+ => (bool) element.GetValue(AutoTooltipProperty);
+
+ private static void TextBlock_SizeChanged(object sender, SizeChangedEventArgs e)
+ {
+ if (sender is TextBlock textBlock)
+ {
+ UpdateTooltip(textBlock);
+ }
+ }
+
+ private static void UpdateTooltip(TextBlock textBlock)
+ {
+ textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
+ var width = textBlock.DesiredSize.Width - textBlock.Margin.Left - textBlock.Margin.Right;
+
+ ToolTipService.SetToolTip(textBlock,
+ textBlock.RenderSize.Width > width || textBlock.ActualWidth < width ? textBlock.Text : null);
+ }
+ }
+}
\ 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 be4d466b..cdfdb39c 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -19,6 +19,7 @@
+