0

MediaElementコントロールのメディア位置を制御するために使用される次のコードがあります。

<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テンプレートに飛び込むと、スライダーコントロールを使用していることが示されていても、Thumbコントロールにアクセスできません。

そうは言っても、これはWPFで完全に可能でした。

4

1 に答える 1

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");
        }
    }
}
于 2013-01-15T07:13:48.140 に答える