2013-01-13 95 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"); 
     } 
    } 
}