我在我的項目中有一個RepeatButton,可以左右滾動圖形。我想讓滾動緩慢加速,因爲用戶用鼠標按住按鈕。據我所知,RepeatButton沒有內置此功能。是否有一種簡單的方法,我可以在用戶按住按鈕時緩慢減小按鈕的間隔屬性,然後在用戶鬆開按鈕時將其重置?逐漸減少RepeatButton的間隔
1
A
回答
1
我不認爲這是可能的。
的原因是RepeatButton
架構在引擎蓋下的方式。基本上,當您按空格鍵或按下鼠標左鍵時,它會根據Interval
屬性的當前設置啓動計時器。當您釋放鍵或鼠標按鈕時,定時器停止。 Interval
屬性剛剛定義爲香草DependencyProperty
,因此它不會執行任何操作來更新定時器的時間間隔。
你也許可以通過反射來修改時間間隔,也許停止/重新啓動計時器......但我不知道它真的值得。
1
雖然有點破解,但只要您希望的間隔總是可以表示爲某個恆定的基本區間的整數倍,則通過擴展RepeatButton實現該效果實際上非常簡單。
下面是一個如何可以做到這一點一個簡單的例子:
public class AcceleratingRepeatButton : System.Windows.Controls.Primitives.RepeatButton
{
private int _intervalCount = -1;
protected override void OnClick()
{
//Always OnClick for the initial press
if (_intervalCount < 0) {
_intervalCount = -1;
base.OnClick();
} else if (ShouldTriggerRepeat(_intervalCount)) {
base.OnClick();
}
_intervalCount += 1;
}
protected override void OnIsPressedChanged(DependencyPropertyChangedEventArgs e)
{
_intervalCount = -1; //When the button is released, reset the counter
base.OnIsPressedChanged(e);
}
private bool ShouldTriggerRepeat(int count)
{
const intervalsAtQuarterRate = 16 //For the first 16 intervals, trigger repeats at 1/4 the normal rate;
const intervalsAtHalfRate = 16 + intervalsAtQuarterRate //the next 16 intervals at 1/2 the rate
if (count < intervalsAtQuarterRate) {
return (count & 7) == 0; //Returns true every 4 intervals
} else if (count < intervalsAtHalfRate) {
return (count & 3) == 0; //Returns true every 2 intervals
} else {
return true;
}
}
}
依賴性能可用於允許從XAML配置(排除支持簡明),和更復雜的邏輯可以在ShouldTriggerRepeat使用以允許更加精細的控制。
相關問題
- 1. 逐漸減少CAShapeLayer WRT半徑
- 2. MySQL逐漸衰減......?
- 3. 如何編輯repeatButton間隔?
- 4. 逐漸減慢循環?
- 5. Cocos2d進度間隔減少
- 6. 如何逐漸減少UIButton的不透明度?
- 7. Java逐漸減少數量,直到目標達到一段時間
- 8. 逐漸減慢球的運動
- 9. NumberPicker的設置增加/減少間隔
- 10. 如何逐漸減慢旋轉動畫
- 11. 如何通過RepeatButton增加和減少一百個數字?
- 12. JApplet創建一個可以反彈並逐漸減少Java的球體
- 13. 什麼可能導致java進程逐漸減少CPU的份額?
- 14. 我如何在拖動元素時逐漸減少元素的透明度?
- 15. 減少amcharts間條間的間隔連續條形圖
- 16. 指數時間減少的設置間隔
- 17. 如何減少PiBeacon的廣告時間間隔?
- 18. 將兩個圖像之間的間隔數減少爲一個
- 19. 如何逐漸減少歌曲在AVAudioPlayer中播放的每秒的剩餘時間
- 20. Tensorflow的計算時間在非常簡單的「for循環」中逐漸減慢
- 21. HTML在圖像上減少漸變層?
- 22. 逐漸減慢輪詢請求的算法
- 23. 減少間距GridView
- 24. 減少宏時間
- 25. 如何減少ChartNew.js中水平堆積條的間隔?
- 26. 逐漸增長的iframe onclick
- 27. 逐漸增加的線Raphael.js
- 28. 的Unix - 刪除前/後間隔(逐列)
- 29. MySQL的JOIN時間減少
- 30. Indy套接字在超線程機器上逐漸減慢
嗯,有趣。你能否提出任何類似的控制措施,以達到我想要的效果? –
我不知道任何其他已有的控件會執行此操作。雖然取決於您的需求,但您可以使用RepeatButton工作方式的修改版本來播放自己的視頻。 RepeatButton從ButtonBase派生,並有一個(相對於其他框架控件)簡單的實現。 – Tim
好的,謝謝! –