2013-08-28 45 views
1

我有一個mediaElement和一個slider
滑塊的最大值是視頻的持續時間(以秒爲單位)(例如,如果視頻爲2分鐘,則滑塊的值爲120)。更新mediaElement基於滑塊值

我想基於滑塊的值更新mediaElement.Position,但問題是我不想更新位置,直到用戶完成操縱該值。

所以我所做的是2個功能:

private void DurationSlider_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 
{ 
    SeekToMediaPosition(); 
} 

如果用戶停止操作滑塊這一功能applys。

private void DurationSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) 
{ 
    SeekToMediaPosition(); 
} 

該函數適用於用戶在滑塊中單擊了不同值的情況。

問題是他們衝突。
操縱滑塊會改變的價值...

所以我所做的是添加了這個功能:

bool manipulating = false; 
private void DurationSlider_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) 
{ 
    manipulating = true; 
} 

,並在功能的ValueChanged我檢查是否manipulating = true與否
解決一半問題 - 它不會在操作時改變視頻位置(直到我完成),但如果我單擊滑塊上的不同位置(不釋放鼠標)並繼續操作滑塊的值 - 它會將視頻位置更改爲我點擊的位置在滑塊上,然後再次改變到我結束操作的地方。

那麼最新錯誤?
我想在用戶釋放鼠標時更改視頻位置僅限。 我無法找到事件,激發我想要的...

+0

您是否試過'Slider'的'ManipulationCompleted' /'PointerPressed' /'PointerReleased'事件? – Xyroid

回答

1

您可以使用PointerCaptureLost用戶完成拖動控件後確定位置的事件。

<Slider PointerCaptureLost=="Slider_PointerCaptureLost" 
     Height="27" Margin="132,162,0,0" VerticalAlignment="Top" Width="303"/> 

然後在代碼後面。

private void Slider_PointerCaptureLost(object sender, DragCompletedEventArgs e) 
    { 
     Slider s = sender as Slider; 
     // Your code 
     MessageBox.Show(s.Value.ToString()); 
    } 
+0

1. Windows Store應用程序中沒有此類事件。 2. ManipulatingCompleted是相同的,因此問題保持不變。 – Ron

+0

@Ron很抱歉,我編輯了我的答案。是否爲您工作? – Naren

+1

是的,它確實解決了這個問題。我可以放棄3個功能,只使用這個功能來實現我所需要的功能。謝謝。 – Ron