我正在从事一个爱好项目。我想创建一个简单的媒体播放器应用程序,但我的一个滑块有问题。我想使其动态化,使其最大值与在应用程序中打开的实际音频文件的长度相同。
因此,如果first.wav文件的长度为56秒,那么我的滑块的最大值将为56。
我在C#中具有以下属性:
private TimeSpan Duration { get; set; }
此属性负责存储我实际音频文件的长度。浏览音频文件后,它会初始化。它存储正确的号码,因此没有问题。我的问题是我不知道如何正确将其绑定到滑块。
这是我的滑块:
Slider Grid.Column="0" x:Name="SliderForCurrentTime" Minimum="1" Maximum="300" TickFrequency="1" IsMoveToPointEnabled="True" ValueChanged="SliderForCurrentTime_ValueChanged"/>
当我播放音频文件时,我会随着DispatcherTimer的每一个滴答声增加滑块,使滑块始终“指向”媒体播放器的位置。我的跳动频率是1,我希望它跳动到滑块最大数量的次数,因此我可以通过单击滑块在音频文件中来回移动。
以固定的最大值很好地工作,但是我猜这不是一个优雅的解决方案,所以我想使其动态化。有什么想法吗?
答案 0 :(得分:0)
您可以添加一个返回秒数的属性:
public double DurationInSeconds => Duration.TotalSeconds;
在Slider
中,将此属性绑定到Maximum
:
<Slider Minimum="1" Maximum="{Binding DurationInSeconds}" TickFrequency="1" IsMoveToPointEnabled="True" />
取决于初始化音频内容属性的对象的方式(或时间),当数据绑定属性更改时,可能需要提高PropertyChanged
。
您还需要确保使用DataContext
属性将滑块的DurationInSeconds
(直接或间接)设置为对象。