【问题标题】:DragStarted event is not getting in UWP Slider - c#DragStarted 事件未进入 UWP Slider - c#
【发布时间】:2018-06-23 20:01:19
【问题描述】:

我想根据我拖动滑块的量来更改视频位置。所以我想使用 DragStarted 和 DragCompleted 事件。但它显示“本地属性 'Dragstarted' 只能应用于从 'Thumb' 派生的类型”。如何将它包含在我的应用中?

 <Slider Name="timelineSlider" Thumb.DragCompleted= "timelineSlider_DragCompleted" DragStarting="timelineSlider_DragStarting" DragOver="timelineSlider_DragOver" Width="300" />

还发现有 DragStarting 和 DragOver 事件。它是否具有与 Dragstarted 和 DragCompleted 事件相同的功能?不幸的是,当我拖动滑块时,DragStarting 和 DragOver 事件没有触发。

【问题讨论】:

标签: c# uwp slider


【解决方案1】:

您可以尝试SliderManipulationStartedManipulationCompleted 事件。

 <Slider ManipulationCompleted="Slider_ManipulationCompleted" ManipulationMode="All" ManipulationStarted="Slider_ManipulationStarted"/>

如果您想处理应用代码中 UI 元素的操作事件(例如 ManipulationStarted),则必须将 ManipulationMode 设置为 SystemNone 以外的值。

private void Slider_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
    var slide= sender as Slider;
    Debug.WriteLine(slide.GetType().ToString());
    Debug.WriteLine(slide.Value+ ">>Slider_ManipulationCompleted");
}

private void Slider_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
    var slide = sender as Slider;
    Debug.WriteLine(slide.GetType().ToString());
    Debug.WriteLine(slide.Value+ "Slider_ManipulationStarted");
}

【讨论】:

    【解决方案2】:

    PointerCaptureLost 在 UWP 应用中运行良好。

    XAML 示例:

    <Slider x:Name="SeekSlider" PointerCaptureLost="SeekSlider_PointerCaptureLost"/>
    

    示例 C#:

    private void SeekSlider_PointerCaptureLost(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
    {
        Slider slider = sender as Slider;
        if (slider != null)
        {
            //mediaPlayer.Position = (float)slider.Value;
        }
    }
    

    它对我有用。

    【讨论】:

      【解决方案3】:

      您可以更方便地使用ValueChanged事件查看Slider的位置变化:

      <Slider x:Name="Slider" ValueChanged="Slider_OnValueChanged" />
      

      您可以使用e.NewValue 获取滑块的新值,使用e.OldValue 获取上一个位置。

      private void Slider_OnValueChanged(object sender, RangeBaseValueChangedEventArgs e)
      {
          Debug.WriteLine($"Slider moved from {e.OldValue} to {e.NewValue}");
      }
      

      【讨论】:

      • no ValueChanged 事件将不符合我的要求,因为每次滑块更改其值时它都会调用。即使播放视频。我只想在拖动滑块时调用事件。
      • 在这种情况下,您可能可以使用 UWP 社区工具包中的 VisualTreeHelper 来访问 Slider 的 Thumb 并连接 DragStarted 和 DragEnded 事件,这将设置一个标志,表示用户正在交互并且ValueChanged 事件是由用户引起的
      • 我在我的一个应用程序中使用了什么:Focuslost 事件...@Martin:你能发送一个指向 VisualTreeHelper 的链接吗?我在 UWP 社区工具包应用中找不到它
      • 我错了名字 - 它是 VisualTreeExtensions - docs.microsoft.com/en-us/windows/uwpcommunitytoolkit/extensions/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多