C#自定義WPF中Slider的Autotooltip模板
Slider控件有一個我比較喜歡的屬性"AutoToolTip",可以在拖動的過程中顯示當前刻度,然而這個刻度卻不支持模板定制,並且就連自定義格式也不行。這就大大的限制瞭它的使用范圍。網上有篇文章解決瞭這個問題,可以實現自定義顯示格式
代碼如下:
/// <summary> /// A Slider which provides a way to modify the /// auto tooltip text by using a format string. /// </summary> public class FormattedSlider : Slider { private ToolTip _autoToolTip; private string _autoToolTipFormat; /// <summary> /// Gets/sets a format string used to modify the auto tooltip's content. /// Note: This format string must contain exactly one placeholder value, /// which is used to hold the tooltip's original content. /// </summary> public string AutoToolTipFormat { get { return _autoToolTipFormat; } set { _autoToolTipFormat = value; } } protected override void OnThumbDragStarted(DragStartedEventArgs e) { base.OnThumbDragStarted(e); this.FormatAutoToolTipContent(); } protected override void OnThumbDragDelta(DragDeltaEventArgs e) { base.OnThumbDragDelta(e); this.FormatAutoToolTipContent(); } private void FormatAutoToolTipContent() { if (!string.IsNullOrEmpty(this.AutoToolTipFormat)) { this.AutoToolTip.Content = string.Format( this.AutoToolTipFormat, this.AutoToolTip.Content); } } private ToolTip AutoToolTip { get { if (_autoToolTip == null) { FieldInfo field = typeof(Slider).GetField( "_autoToolTip", BindingFlags.NonPublic | BindingFlags.Instance); _autoToolTip = field.GetValue(this) as ToolTip; } return _autoToolTip; } } }
使用起來也很簡單。
<local:FormattedSlider AutoToolTipFormat="{}{0}% used" AutoToolTipPlacement="BottomRight" />
其實原理也不復雜,通過反射設置"_autoToolTip"變量,從而實現自定義AutoToolTip格式
private ToolTip AutoToolTip { get { if (_autoToolTip == null) { FieldInfo field = typeof(Slider).GetField( "_autoToolTip", BindingFlags.NonPublic | BindingFlags.Instance); _autoToolTip = field.GetValue(this) as ToolTip; } return _autoToolTip; } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- C# 通過反射獲取類型的字段值及給字段賦值的操作
- Unity 制作一個分數統計系統
- c#使用Aspose打印文件的示例
- C#實現圖表中鼠標移動並顯示數據
- C# 通過ServiceStack 操作Redis