Windows runtime 访问Thumb.drag在滑块控件中完成

Windows runtime 访问Thumb.drag在滑块控件中完成,windows-runtime,winrt-xaml,Windows Runtime,Winrt Xaml,我有以下代码,用于控制MediaElement控件的介质位置 <Slider Grid.Row="1" Maximum="{Binding TotalTimeStamp}" Value="{Binding CurrentTimeStamp, Mode=TwoWay}" Thumb.DragStarted="Thumb.OnDragStarted" Thumb.DragCompleted=""Thumb_OnDragCompleted/> 为了在MediaElement中查找视频

我有以下代码,用于控制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,也无法访问Thumb控件,即使深入滑块模板显示它确实使用了滑块控件


也就是说,这在WPF中是完全可能的。

我使用了一些模板,但看起来你是对的-如果你拖动拇指-你会得到拖动事件,但是如果你开始拖动其他地方-你能得到的最好的是一些指针事件。也许你可以通过这些来达到某个目的,但也许你只需要控制事态发展

这就是我所尝试的:

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");
        }
    }
}
使用System.Linq;
使用WinRTXamlToolkit.Controls.Extensions;
使用WinRTXamlToolkit.debug;
使用Windows.UI.Xaml;
使用Windows.UI.Xaml.Controls;
使用Windows.UI.Xaml.Controls.Primitives;
使用Windows.UI.Xaml.Input;
使用Windows.UI.Xaml.Shapes;
名称空间App91
{
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
此.Loaded+=已加载;
}
已加载专用void(对象发送方,RoutedEventArgs RoutedEventArgs)
{
//WinRTXamlToolkit.Controls.Extensions.VisualTreeHelperExtensions.GetFirstDegenantofType()
水平模板网格=
s1.GetDescendantsOfType()
.First(g=>g.Name==“水平模板”);
horizontalTemplateGrid.PointerPressed+=OnPointerPressed;
horizontalTemplateGrid.PointerReleased+=OnPointerReleased;
horizontalTemplateGrid.PointerMoved+=OnPointerMoved;
可变矩形=
s1.GetDescendantsOfType()
.First(g=>g.Name==“HorizontalTrackRect”);
rect.PointerPressed+=OnPointerPressed;
rect.PointerReleased+=OnPointerReleased;
rect.PointerMoved+=OnPointerMoved;
直肠=
s1.GetDescendantsOfType()
.First(g=>g.Name==“HorizontalDecreaseRect”);
rect.PointerPressed+=OnPointerPressed;
rect.PointerReleased+=OnPointerReleased;
rect.PointerMoved+=OnPointerMoved;
var thumb=s1.getFirstDegenantofType();
thumb.DragStarted+=ThumbOnDragStarted;
thumb.DragCompleted+=ThumbOnDragCompleted;
thumb.PointerPressed+=OnPointerPressed;
thumb.PointerReleased+=OnPointerReleased;
this.PointerPressed+=OnPointerPressed;
this.PointerReleased+=OnPointerReleased;
}
私有void OnPointerMoved(对象发送方、PointErrorutedEventArgs、PointErrorutedEventArgs)
{
if(pointerRoutedEventArgs.Pointer.IsInContact)
{
DC.Trace(“指针移动”);
}
}
private void OnPointerReleased(对象发送方,PointerRoutedEventArgs PointerRoutedEventArgs)
{
追踪(
“在上释放指针”+
PointErrorutedEventArgs.OriginalSource.GetType()+
“命名”+
((FrameworkElement)PointErroredEventArgs.OriginalSource.Name);
}
private void OnPointerPressed(对象发送方,PointErroroutedEventArgs PointErroroutedEventArgs)
{
追踪(
“指针按下”+
PointErrorutedEventArgs.OriginalSource.GetType()+
“命名”+
((FrameworkElement)PointErroredEventArgs.OriginalSource.Name);
}
私有无效ThumbOnDragCompleted(对象发送方,DragCompletedEventArgs DragCompletedEventArgs)
{
跟单信用证(“拖拽完成”);
}
私有无效ThumbOnDragStarted(对象发送方,DragStartedEventArgs DragStartedEventArgs)
{
DC.Trace(“拖动启动”);
}
private void S1_OnValueChanged(对象发送方,RangeBaseValueChangedEventArgs e)
{
跟单信用证(“价值变更”);
}
}
}

您是否尝试过检查指针或操作事件或覆盖?