将 MediaElement 绑定到 WPF 中的滑块位置

2023-12-21

尝试将滑块的最大值绑定到媒体元素的持续时间并将滑块的当前值绑定到媒体元素的位置,但由于某些原因它没有。

我希望滑块在视频播放时移动拇指。

<Slider x:Name="videoSlider" Value="{Binding ElementName=mp3MediaElement, Path=Position}" 
ValueChanged="videoSlider_ValueChanged" IsMoveToPointEnabled="True" 
Maximum="{Binding ElementName=mp3MediaElement, Path=NaturalDuration}" 
AllowDrop="True" DataContext="{Binding ElementName=mp3MediaElement}" />

我没有使用绑定.. 我遇到了类似的问题,并为此使用了计时器(我的代码在 Silverlight 中,它在 WPF 上应该是相同的):

第一个方向(影片更新滑块)

private TimeSpan TotalTime;

private void MyMediaElement_MediaOpened(object sender, RoutedEventArgs e)
        {
            TotalTime = MyMediaElement.NaturalDuration.TimeSpan;

            // Create a timer that will update the counters and the time slider
            timerVideoTime = new DispatcherTimer();
            timerVideoTime.Interval = TimeSpan.FromSeconds(1);
            timerVideoTime.Tick += new EventHandler(timer_Tick);
            timerVideoTime.Start();
        }

void timer_Tick(object sender, EventArgs e)
        {
            // Check if the movie finished calculate it's total time
            if (MyMediaElement.NaturalDuration.TimeSpan.TotalSeconds > 0)
            {
                if (TotalTime.TotalSeconds > 0)
                {
                    // Updating time slider
                    timeSlider.Value = MyMediaElement.Position.TotalSeconds /
                                       TotalTime.TotalSeconds;
                }
            }
        }

第二方向(用户更新滑块)
在 ctor 或类似的东西上写下以下行:

timeSlider.AddHandler(MouseLeftButtonUpEvent, 
                      new MouseButtonEventHandler(timeSlider_MouseLeftButtonUp), 
                      true);

事件处理程序是:

private void timeSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (TotalTime.TotalSeconds > 0)
            {
                MyMediaElement.Position = TimeSpan.FromSeconds(timeSlider.Value * TotalTime.TotalSeconds);
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 MediaElement 绑定到 WPF 中的滑块位置 的相关文章

随机推荐

  • 如何在WebRTC对等连接中创建数据通道?

    我正在尝试学习如何创建一个RTCPeerConnection这样我就可以使用DataChannelAPI 这是我根据我的理解尝试过的 var client new mozRTCPeerConnection var server new mo
  • PHP、PDO 和异常

    我目前对于 PDO 有点进退两难 我最近转而从我自己的自定义数据库类中使用它 因为我想利用事务 我面临的问题是如何从已经用 PDO 的 try catch 包装的代码块内部抛出异常 这是一个例子 try PDO code Transacti
  • 如何在React hooks中自动停止setInterval?

    我想构建一个循环进度条 计数到 60 然后自动停止 但它无法停止 我想使用 React hooks 和 useEffect 我的代码在这里 https codesandbox io s nostalgic khorana lijdyo fi
  • 如何在 iOS 15 Xcode 13 中将 TabView tabItem 上的填充图标更改为不填充?

    如何将 iOS 15 Xcode 13 中的 TabView tabItem 上的填充图标更改为不填充 现在看来图标是默认填充的 我的代码 import SwiftUI struct Test Home V View var body so
  • Promise.catch() 在 AngularJS 单元测试中没有捕获异常

    我正在 Typescript 中为我的应用程序编写 Jasmine 单元测试 并通过 Resharper 运行它们 如果处理程序抛出异常 它应该执行一个操作 describe Q Service Test gt var q ng IQSer
  • 边缘会话.cookie_lifetime

    我的网站功能在 Edge 上损坏 尤其是登录 有人告诉我这与session cookie lifetime 对于此事的任何帮助 我将不胜感激 请注意 我不是开发人员 没有任何代码知识 我的一些 php ini 文件 如果有帮助的话 sess
  • 查找上个月

    我见过一些使用的方法dateutil模块来执行此操作 但是有没有一种方法可以在不使用内置库的情况下执行此操作 例如 当前月份是七月 我可以使用datetime now 功能 python 返回上个月的最简单方法是什么 这很简单 gt gt
  • 是否可以在函数内使用 Excel 数组中的单个单元格引用?

    我有一些数据想要放入 LOGEST 函数中 e g x values 0 463 0 609 0 887 y values 0 05 0 1 0 2 For this example I have put the data into the
  • asyncio 和 trio 之间的核心区别是什么?

    今天 我发现了一个名为trio http trio readthedocs io en latest index html它说它自己是一个供人类使用的异步 API 这些词有点相似requests As requests确实是一个不错的库 我
  • 如何在队列上设置 ActiveMQ redeliveryPolicy?

    如何在队列上的 ActiveMQ 中设置 redeliveryPolicy 1 在文档中 请参阅 activeMQ 重新传送 http activemq apache org redelivery policy html 说明您应该在 Co
  • 如何使用 Microsoft.Graph 将文件附加到 Sharepoint 中的项目

    Microsoft Graph Sharepoint api 允许更新列表项https developer microsoft com en us graph docs api reference beta api listitem upd
  • 1 和 0 的大字符串到 BitSet

    我有一个非常大的字符串 64 个字符 其中包含 1 和 0 样本 1001111111101010011101101011100101001010111000101111011110001000 我想要的只是将其转换为 BitSet var
  • 丰富 SparkContext 而不会引发序列化问题

    我正在尝试使用 Spark 处理来自 HBase 表的数据 这篇博文 http www vidyasource com blog Programming Scala Java Data Hadoop Analytics 2014 01 25
  • 在 Ubuntu 18.10 上安装 ROS Melodic

    I can t是唯一对 Cosmic 与 Wayland 和 Melodic 的组合感兴趣的人 我会坦白说 我似乎已经在 XPS 13 9370 上成功管理了此操作 或者至少安装脚本 最终 成功完成 然而 有一个非常棘手的解决方法 无论结果
  • 当 debug == 0 时如何手动刷新模型缓存?

    每当我在 CakePHP 站点的生产版本上对数据库进行更改 其中调试设置为 0 时 这些更改都不会反映出来 我知道我可以通过暂时将 debug 更改为 2 来解决此问题 但是当大量人访问此站点时 这似乎不安全 我查看了缓存文件 但由于尚无相
  • VS Code 中的 Node.js TypeScript 调试

    有人可以提供 VS Code 配置的示例吗 它允许我 启动 Node js 调试器 编辑任何 TS 文件 看到项目重新编译并重新启动调试器吗 这是开箱即用的支持吗 能nodemon以某种方式被使用 谢谢 是的 您可以使用nodemon 在您
  • 如何加载 ace 编辑器

    我正在尝试使用 Ace 代码编辑器库 http ace ajax org http ace ajax org 但我遇到了麻烦 根据嵌入指南 这应该从 Amazon CDN 加载所需的 js 文件 然而它失败了 在 Chrome 控制台中显示
  • 通过智能 HTTP 推送到 Git 共享存储库的权限不足

    我正在尝试为我们的团队评估 git 要求之一是使用 HTTPS 作为传输方法 我一直在努力遵循git http 后端 http www kernel org pub software scm git docs git http backen
  • 交互式保存文件?

    Using tk choose files or file choose我能够交互式地选择一个文件 是否有一个类似的函数 我可以允许用户交互地决定在哪里保存 write table 的输出 在 Windows 7 上并通过 RGUI 工作
  • 将 MediaElement 绑定到 WPF 中的滑块位置

    尝试将滑块的最大值绑定到媒体元素的持续时间并将滑块的当前值绑定到媒体元素的位置 但由于某些原因它没有 我希望滑块在视频播放时移动拇指