2014-10-08 32 views
3

以前有幾個問題涉及將數值添加到WPF Slider(例如herehere)上的刻度線。到目前爲止,我發現的所有建議的解決方案都是繼承TickBar類,然後使用DrawText(FormattedText text, Point point)來繪製該值。喜歡的東西:使用TextBox渲染WPF滑塊上的刻度線

protected override void OnRender(DrawingContext dc) 
{ 
    foreach(double tick in Ticks) 
    { 
     formattedText = new FormattedText(Convert.ToString(tick), 
             CultureInfo.GetCultureInfo("en-us"), 
             FlowDirection.LeftToRight, 
             new Typeface("Verdana"), // I don't know why all examples use the Verdana font :P 
             10, Brushes.Black); 
     dc.DrawText(formattedText, ComputeTheRightPosition(tick)); 
    } 
} 

雖然這是一個有效的解決方案,我發現它不適合我足夠的通用性,由於FormattedText。在我的應用程序中,Style可以在運行時更改,所以我寧願將所有數字都放在TextBlock之內,這樣可以動態更新它的樣式和字體等等。

是否可以在SliderTickBar子類中以這種方式添加文本框?

+1

如果你爲它提供了一個新的ControlTemplate,你可以添加你喜歡的任何東西。 – Sheridan 2014-10-08 09:40:34

+1

不幸的是'TickBar'不是一個控件,所以我們不能使用任何模板。除非您修改Slider本身的模板,並將TickBar替換爲您的自定義TickBar。 – 2014-10-08 10:27:20

+0

這似乎正是問題所在:我無法爲「TickBar」製作控制模板。 @KingKing:你知道一個例子,你做了什麼嗎?原因我找不到任何示例或解釋如何修改「TickBar」的模板,更不用說如何修改勾號以便它們顯示在文本框中。 – Yellow 2014-10-09 10:18:42

回答

0

開箱即用的解決方案 -

將畫布放在滑塊上方。當滑塊值發生變化時,獲取比率值/(最大 - 最小)

使用相同的比率可以使用SetLeft或Render Transform將文本塊放在畫布中。