2013-01-13 80 views
0

我有以下用於控制MediaElement控件的媒體位置的代碼。在滑塊控件中訪問Thumb.DragCompleted

<Slider Grid.Row="1" Maximum="{Binding TotalTimeStamp}" Value="{Binding CurrentTimeStamp, Mode=TwoWay}" Thumb.DragStarted="Thumb.OnDragStarted" Thumb.DragCompleted=""Thumb_OnDragCompleted/> 

對於尋求的MediaElement內的視頻位置的目的,我需要能夠暫停視頻的時候拇指拖動已經開始,然後恢復視頻一旦拇指阻力已經完成。但是,由於某些原因,我無法訪問滑塊控件中的Thumb控件的DragStarted和DragCompleted,也無法訪問拇指控件,即使潛入Slider模板中也會顯示它使用滑塊控件。

說到這一點,WPF完全有可能。

+0

您是否嘗試過檢查指針或操縱事件或重寫? –

回答

0

我用模板玩了一下,但看起來你是對的 - 如果你拖動大拇指 - 你會得到拖動事件,但如果你開始拖動其他地方 - 你可以得到的最好的是一些指針事件。也許你可以在這些地方找到一些地方,但可能只是需要扼殺事件。

這是我的嘗試:

using System.Linq; 
using WinRTXamlToolkit.Controls.Extensions; 
using WinRTXamlToolkit.Debugging; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Shapes; 

namespace App91 
{ 
    public sealed partial class MainPage : Page 
    { 
     public MainPage() 
     { 
      this.InitializeComponent(); 
      this.Loaded += OnLoaded; 
     } 

     private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) 
     { 
      //WinRTXamlToolkit.Controls.Extensions.VisualTreeHelperExtensions.GetFirstDescendantOfType<>() 
      var horizontalTemplateGrid = 
       s1.GetDescendantsOfType<Grid>() 
       .First(g => g.Name == "HorizontalTemplate"); 

      horizontalTemplateGrid.PointerPressed += OnPointerPressed; 
      horizontalTemplateGrid.PointerReleased += OnPointerReleased; 
      horizontalTemplateGrid.PointerMoved += OnPointerMoved; 

      var rect = 
       s1.GetDescendantsOfType<Rectangle>() 
       .First(g => g.Name == "HorizontalTrackRect"); 

      rect.PointerPressed += OnPointerPressed; 
      rect.PointerReleased += OnPointerReleased; 
      rect.PointerMoved += OnPointerMoved; 

      rect = 
       s1.GetDescendantsOfType<Rectangle>() 
       .First(g => g.Name == "HorizontalDecreaseRect"); 

      rect.PointerPressed += OnPointerPressed; 
      rect.PointerReleased += OnPointerReleased; 
      rect.PointerMoved += OnPointerMoved; 

      var thumb = s1.GetFirstDescendantOfType<Thumb>(); 
      thumb.DragStarted += ThumbOnDragStarted; 
      thumb.DragCompleted += ThumbOnDragCompleted; 
      thumb.PointerPressed += OnPointerPressed; 
      thumb.PointerReleased += OnPointerReleased; 
      this.PointerPressed += OnPointerPressed; 
      this.PointerReleased += OnPointerReleased; 
     } 

     private void OnPointerMoved(object sender, PointerRoutedEventArgs pointerRoutedEventArgs) 
     { 
      if (pointerRoutedEventArgs.Pointer.IsInContact) 
      { 
       DC.Trace("Pointer Moved"); 
      } 
     } 

     private void OnPointerReleased(object sender, PointerRoutedEventArgs pointerRoutedEventArgs) 
     { 
      DC.Trace(
       "Pointer Released on " + 
       pointerRoutedEventArgs.OriginalSource.GetType() + 
       " named " + 
       ((FrameworkElement)pointerRoutedEventArgs.OriginalSource).Name); 
     } 

     private void OnPointerPressed(object sender, PointerRoutedEventArgs pointerRoutedEventArgs) 
     { 
      DC.Trace(
       "Pointer Pressed on " + 
       pointerRoutedEventArgs.OriginalSource.GetType() + 
       " named " + 
       ((FrameworkElement)pointerRoutedEventArgs.OriginalSource).Name); 
     } 

     private void ThumbOnDragCompleted(object sender, DragCompletedEventArgs dragCompletedEventArgs) 
     { 
      DC.Trace("Drag Completed"); 
     } 

     private void ThumbOnDragStarted(object sender, DragStartedEventArgs dragStartedEventArgs) 
     { 
      DC.Trace("Drag Started"); 
     } 

     private void S1_OnValueChanged(object sender, RangeBaseValueChangedEventArgs e) 
     { 
      DC.Trace("Value Changed"); 
     } 
    } 
}