2013-04-15 60 views
3

Slider.ValueChanged事件的默認行爲是在用戶拖動控件時多次觸發ValueChanged。有沒有辦法只在拖動結束時觸發這個事件?XAML Windows應用商店應用 - 在拖動期間忽略Slider.ValueChanged

我已經嘗試過的一件事是綁定到Thumb.DragStarted和Thumb.DragCompleted事件,並添加一些標誌來控制進程,但如果用戶在滑塊的主體中​​單擊,則不會觸發這些事件大拇指。

+0

我認爲更好的解決方案是限制ValueChanged事件。 – Denis

回答

2

如果您不想自定義控件,則可以處理KeyUp事件和PointerCaptureLost事件,而不處理ValueChanged事件。

private void slider_PointerCaptureLost(object sender, PointerRoutedEventArgs e) 
{ 
    HandleSliderValueChange(); 
} 

private void slider_KeyUp(object sender, KeyRoutedEventArgs e) 
{ 
    //Make sure an arrow key, Home, or End was pressed 
    //either explicitly perform the flag checks 
    //if(e.Key.HasFlag(VirtualKey.Up & VirtualKey.Down & VirtualKey.Left & VirtualKey.Right & VirtualKey.Home & VirtualKey.End)) 

    //or check the int values 
    int keyVal = (int)e.Key; 
    if(keyVal >= 35 && keyVal <= 40) 
     HandleSliderValueChange(); 
} 

private void HandleSliderValueChange() 
{ 
    //your value changed code 
} 

此當用戶結束拖動,點擊滑塊本身,或使用的箭頭,主頁,或結束鍵來改變值應調用HandleSliderValueChange方法。

+0

PointerCaptureLost似乎很完美。謝謝。 – Badaro