WPF--TextBlock的ToolTip附加属性
大家可能在項目中,有的時候,由于顯示的內容過長,所以,需要顯示一部分內容,然后后面用省略號,把鼠標放上去,會顯示出來全部的內容。
作為一個LowB程序員的我,第一反應是SubString截取,然后替換,然后ToolTip顯示原有的內容。
我相信很大一部分的初級程序員第一想法也是這個,然而,這種方法不具有一個通用型,當然,有的童鞋可能說,寫個函數,然后設置傳遞的參數,這樣不就可以了嗎?
事實上,這樣也是很不方便的。
本文的重點來了:
昨天在項目里發現了同事寫的一個很棒的附加屬性,今天把它共享出來,供大家學習。
在此,先感謝那位同事,雖然不知道誰寫的(沒有備注),但是真的很棒。
代碼不難,但是效果確實不錯,先看下效果。
由于是一個可變的長度,所以,不是用傳統的一個截取的方法,而是根據TextBlock外部的寬度,自動實現的截取效果,而且感覺系統的這種,還挺有意思。
可以看到第一行,前面是文字,后面是數字“我是測試長度1111111111111111111111111”,直接從數字部分往后,都用了省略號,而不是必須到了最外層的邊緣才進行的截取。
第二行,由于后面是文字,到了最外層的寬度,才用省略號進行了替換。
代碼如下:
public class TextBlockToolTip{public static bool GetAutoTooltip(DependencyObject obj){return (bool)obj.GetValue(AutoTooltipProperty);}public static void SetAutoTooltip(DependencyObject obj, bool value){obj.SetValue(AutoTooltipProperty, value);}// Using a DependencyProperty as the backing store for AutoTooltip. This enables animation, styling, binding, etc...public static readonly DependencyProperty AutoTooltipProperty =DependencyProperty.RegisterAttached("AutoTooltip", typeof(bool), typeof(TextBlockToolTip), new PropertyMetadata(false,OnAutoTooltipPropertyChanged));private static void OnAutoTooltipPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){TextBlock textBlock = d as TextBlock;if (textBlock == null)return;if (e.NewValue.Equals(true)){textBlock.TextTrimming = TextTrimming.WordEllipsis;ComputeAutoTooltip(textBlock);textBlock.SizeChanged += TextBlock_SizeChanged;}else{textBlock.SizeChanged -= TextBlock_SizeChanged;}}private static void TextBlock_SizeChanged(object sender, SizeChangedEventArgs e){TextBlock textBlock = sender as TextBlock;ComputeAutoTooltip(textBlock);}private static void ComputeAutoTooltip(TextBlock textBlock){textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));var width = textBlock.DesiredSize.Width;if (textBlock.ActualWidth<width){ToolTipService.SetToolTip(textBlock, textBlock.Text);}else{ToolTipService.SetToolTip(textBlock, null);}}}測試代碼如下:
就是把附加屬性AutoToolTip設置為True就可以了。
希望這個附加屬性可以對你們有所幫助。
?
轉載于:https://www.cnblogs.com/ZXdeveloper/p/7283647.html
總結
以上是生活随笔為你收集整理的WPF--TextBlock的ToolTip附加属性的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 跨时钟域电路设计——结绳法
- 下一篇: windows/system32/win
