如何在WPF中制作动态滑块?

时间:2019-02-18 17:33:38

标签: c# wpf data-binding

我正在从事一个爱好项目。我想创建一个简单的媒体播放器应用程序,但我的一个滑块有问题。我想使其动态化,使其最大值与在应用程序中打开的实际音频文件的长度相同。

因此,如果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,我希望它跳动到滑块最大数量的次数,因此我可以通过单击滑块在音频文件中来回移动。

以固定的最大值很好地工作,但是我猜这不是一个优雅的解决方案,所以我想使其动态化。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以添加一个返回秒数的属性:

public double DurationInSeconds => Duration.TotalSeconds;

Slider中,将此属性绑定到Maximum

<Slider Minimum="1" Maximum="{Binding DurationInSeconds}" TickFrequency="1" IsMoveToPointEnabled="True" />

取决于初始化音频内容属性的对象的方式(或时间),当数据绑定属性更改时,可能需要提高PropertyChanged

您还需要确保使用DataContext属性将滑块的DurationInSeconds(直接或间接)设置为对象。