将进度条绑定到 wpf 中的媒体元素

2023-11-21

在 c#/wpf 中,我向窗口添加了进度条和媒体元素。这个想法是进度条显示媒体元素中的播放量。

我用以下 xaml 尝试过:

<Window x:Class="TestApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="627" Width="889">
    <Grid>
    <MediaElement Margin="152,8,140,41" Name="mediaElement1" MediaEnded="mediaElement1_MediaEnded" Visibility="Hidden" />
    <ProgressBar Height="23" Margin="152,8,10,0" Name="mp3PlayingProgressBar" VerticalAlignment="Top" Foreground="DarkBlue" Maximum="{Binding Path=NaturalDuration.TimeSpan.TotalSeconds, Mode=OneWay, ElementName=mediaElement1}" Value="{Binding Path=Position.TotalSeconds, Mode=OneWay, ElementName=mediaElement1}" />
    </Grid>
</Window>

我尝试将 Maximum 和 Value 属性绑定到 mediaelement。但是,当我将 mp3 加载到 mediaelement 中时,进度条没有任何反应。 (音乐正在播放,因此 mp3 已加载并正确播放)。

我更喜欢用绑定来做到这一点。

我在这里做错了什么?


这是因为媒体未打开,因此进度条不知道最大值。尝试这个...

对 MediaOpened 使用以下事件,对进度条或滑块使用 MouseLeftButtonUp。我尝试了一下,效果很好。

public partial class AudioPage : Page
{
    TimeSpan _position;
    DispatcherTimer _timer = new DispatcherTimer();

    public AudioPage()
    {
        InitializeComponent();
        _timer.Interval = TimeSpan.FromMilliseconds(1000);
        _timer.Tick += new EventHandler(ticktock);
        _timer.Start();
    }

    void ticktock(object sender, EventArgs e)
    {
        sliderSeek.Value = media.Position.TotalSeconds;
    }

    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
    }

    private void Play_Click(object sender, RoutedEventArgs e)
    {
        media.Play();
    }

    private void Pause_Click(object sender, RoutedEventArgs e)
    {
        media.Pause();
    }

    private void Stop_Click(object sender, RoutedEventArgs e)
    {
        media.Stop();
    }

    private void media_MediaOpened(object sender, RoutedEventArgs e)
    {
        _position = media.NaturalDuration.TimeSpan;
        sliderSeek.Minimum = 0;
        sliderSeek.Maximum = _position.TotalSeconds;
    }

    private void sliderSeek_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        int pos = Convert.ToInt32(sliderSeek.Value);
        media.Position = new TimeSpan(0, 0, 0, pos, 0);
    }
}

关联XAMl如下...

<Grid x:Name="LayoutRoot" Background="#FFFFE8E8">
    <Grid.RowDefinitions>
        <RowDefinition Height="220*" />
        <RowDefinition Height="75*" />
    </Grid.RowDefinitions>
    <MediaElement Height="189" HorizontalAlignment="Left" Margin="12,12,0,0" Name="media" VerticalAlignment="Top" Width="399" Source="anyfile.mp3" AutoPlay="True" MediaOpened="media_MediaOpened" />
    <StackPanel Orientation="Horizontal" Grid.Row="1" Height="30" Margin="12,8,163,37">
        <TextBlock Text="Volume" VerticalAlignment="Center"></TextBlock>
        <Slider Margin="2" Maximum="1" Minimum="0" Width="102" Value="{Binding Path=Volume, Mode=TwoWay, ElementName=media}"></Slider>
        <TextBlock Text="{Binding ElementName=media, Path=Volume, Mode=OneWay, StringFormat=0.00}" VerticalAlignment="Center" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" Grid.Row="1" Height="30" Margin="26,47,163,-2">
        <TextBlock Text="Seek" VerticalAlignment="Center"></TextBlock>
        <Slider Margin="2" Width="104" Name="sliderSeek" MouseLeftButtonUp="sliderSeek_MouseLeftButtonUp"></Slider>
        <TextBlock Text="{Binding ElementName=sliderSeek, Path=Value, StringFormat=0}" VerticalAlignment="Center"></TextBlock>
    </StackPanel>
    <StackPanel Orientation="Horizontal" Grid.Row="1" Height="30" Margin="266,8,12,37">
        <Button Name="Play" Content="Play" Margin="2" Click="Play_Click" />
        <Button Name="Pause" Content="Pause" Margin="2" Click="Pause_Click" />
        <Button Name="Stop" Content="Stop" Margin="2" Click="Stop_Click" />
    </StackPanel>
</Grid>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将进度条绑定到 wpf 中的媒体元素 的相关文章

随机推荐

  • System.Drawing.Image 流式传输 C#

    我有一个System Drawing Image在我的程序中 该文件不在内存中保存的文件系统上 我需要从中创建一个流 我该怎么做呢 请尝试以下操作 public static Stream ToStream this Image image
  • Symfony 2 服务容器为空

    我是 Symfony 2 的新手 正在尝试创建一些简单的应用程序来学习 我创建了一个捆绑包GoogleApiBundle 在捆绑包内 我有一个控制器YouTubeController 这是一项服务 services yml service
  • 生成签名的apk android studio

    我是 Android 开发新手 刚刚完成了我的第一个应用程序 我想在 android studio 中生成签名的 apk 我阅读了开发人员文档 但无法理解这些步骤 当我点击Build gt Generate Signed APK 它向我显示
  • Firebase 身份验证 JS/PHP

    我的任务是为基于 firebase 的 Android 应用程序构建 Web 界面 我有一些与数据库 云函数 交互的端点 要访问这些端点 我需要使用电子邮件和密码 1 对用户进行身份验证 检索 accessToken 2 并使用Author
  • 在Matlab中更改图形字体没有效果

    我在标签和图例中渲染希腊字符时遇到问题 所以我想也许切换字体会有所帮助 因此 我发现了一个更大的问题 Matlab似乎根本不尊重我的字体设置 当然我也尝试过 set gcf FontName Ubuntu set gca FontName
  • 如何应用 GCC 补丁

    我正在尝试申请this给 MinGW 上的 GCC 打补丁来获取它编译 GDC 2 但我不知道怎么做 我对 GCC 的内部结构仍然很陌生 甚至对一般的 nix 工具也很陌生 我知道有patch命令 但我不知道如何使用它 我什至不知道我是否有
  • 在写入所有字节之前无法关闭流(GoodData API)

    我做了一些搜索 大多数人在发送大量数据时似乎都会遇到这个问题 但我没有 我正在向 API 发出以下请求 request Method POST request ContentType application json request Acc
  • 为什么 JSON.NET 在反序列化时不支持继承

    我正在使用以下工作正常的类将 JSON 字符串反序列化为根对象 Serializable public class MoviesListRootObject public int count get set public Paginatio
  • 组织一个多文件 Go 项目 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 注意 这个问题与this one 但是两年在Go历史上是一个非常长的时间 在开发过程中组织 Go 项目的标准方法是什么 我的项目是单个包mypack 所以我想我把所有的 go 文件放在一个
  • 如何以编程方式获取带有更新信息的java版本

    java version 打印如下 java version 1 8 0 40 Java TM SE Runtime Environment build 1 8 0 40 b27 Java HotSpot TM 64 Bit Server
  • 将自定义依赖属性绑定到自定义 WPF 样式

    我在设计继承的扩展器时遇到问题 我的目的是在默认 Expander 标题中的切换按钮和文本后面有一个进度栏 我有这个 XAML 代码 它为我提供了标题中的进度条 这是一种定制风格
  • 如何在 Rails 中创建类别

    我正在尝试将类别添加到我的 Rails 应用程序 但不太知道如何执行此操作 我有很多 Pin 图 图像 并希望用户能够在这些 Pin 图上分配类别 ASSIGN无需创建 编辑或删除类别 只需为其 Pin 图选择一个类别即可 这意味着 当用户
  • 如何将 build.gradle 导入 IntelliJ

    NOTE 完整的源代码is here 我使用 Gradle Init 插件创建了一个 Scala 库 gradle init type scala library 然后我修改了它build gradle为 Gradle 2 13 生成包装器
  • Xcode/iOS:如何在向下滚动时隐藏导航和工具栏?

    我想在 iPhone 上向下滚动时隐藏这两个栏 当我向上滚动时 它们应该再次出现 我该如何处理这个问题 void scrollViewWillBeginScroll UIScrollView scrollView if scrollView
  • vuejs 在模板中渲染异步函数显示承诺而不是返回的数据

    我正在调用一个加载个人资料图片的异步函数 await 调用按预期将值返回到变量 pf 但我无法从 loadProfilePic 返回该值 至少一开始我尝试返回一个静态字符串以显示为 object Promise 在 vue 模板中 但是当我
  • 为什么打字稿无法通过其字段推断通用类型?

    我不明白为什么有时打字稿无法推断 const 的泛型类型 这是一个例子 type OneTwoThree 1 2 3 type MyType
  • Clang stdio,h 文件未找到

    我使用 Visual Studio 安装了 clang 然后按照文档中所述构建了突出显示的项目 构建成功 但是当我尝试这样做时 clang cc1 analyze analyzer checker core DivideZero test
  • ggsave() 不会将文本加粗,它会更改所有文本的字体而不仅仅是绘图标题

    我正在 ggplot2 中制作图表ggsave 没有达到我的预期 require ggplot2 require showtext showtext auto hedFont lt Pragati Narrow font add googl
  • 字符数组的初始值设定项字符串太长错误

    我正在使用 C 开发 BlackJack 游戏 其中有以下代码 但出现错误 typedef struct int value char suit 8 char name 8 Deck Deck Cards 52 1 Ace Hearts 2
  • 将进度条绑定到 wpf 中的媒体元素

    在 c wpf 中 我向窗口添加了进度条和媒体元素 这个想法是进度条显示媒体元素中的播放量 我用以下 xaml 尝试过