2013-01-13 2 views
0

다음 코드는 MediaElement 컨트롤의 미디어 위치를 제어하는 ​​데 사용됩니다. MediaElement를 내 비디오 위치를 추구의 목적 Slider 컨트롤에서 Thumb.DragCompleted에 액세스

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

, 나는 엄지 손가락 드래그가 시작되었을 때 비디오를 일시 정지 한 다음 엄지 손가락 드래그가 완료되면 영상을 재개 할 수 있어야합니다. 그러나 어떤 이유에서든지 슬라이더 컨트롤 내에서 Thumb 컨트롤의 DragStarted 및 DragCompleted에 액세스 할 수 없으며 슬라이더 템플릿을 다이빙하면 슬라이더 컨트롤을 사용자에게 보여 주지만 엄지 컨트롤에 액세스 할 수 없습니다.

이렇게 말하면 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"); 
     } 
    } 
} 
관련 문제