绑定媒体元素和滑块

时间:2014-10-14 13:26:49

标签: wpf mediaelement

所以我有一个媒体元素和一个滑块 我想将 MediaElement 的Position属性绑定到ViewModel中的滑块

如: -

<Slider 
    x:Name="PositionSlider"  
    Minimum="0" 
    Maximum="{Binding Position,Mode=TwoWay"/>

<MediaElement 
    x:Name="mediaElement"
    Position="{Binding Position,Mode=TwoWay"/>

但我不能bind position of the media element since it's not a dependency property

有没有其他方法可以实现这个目标?

1 个答案:

答案 0 :(得分:2)

你可以实现一个可绑定的附加属性,当它的值发生变化时,它会改变媒体元素的位置。

附属物的定义如下:

public class MediaElementExtension
{


    public static TimeSpan GetBindablePosition(DependencyObject obj)
    {
        return (TimeSpan)obj.GetValue(BindablePositionProperty);
    }

    public static void SetBindablePosition(DependencyObject obj, double value)
    {
        obj.SetValue(BindablePositionProperty, value);
    }

    // Using a DependencyProperty as the backing store for BindablePosition.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty BindablePositionProperty =
        DependencyProperty.RegisterAttached("BindablePosition", typeof(TimeSpan), typeof(MediaElementExtension), new PropertyMetadata(new TimeSpan(), BindablePositionChangedCallback));

    private static void BindablePositionChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MediaElement mediaElement = d as MediaElement;
        if (mediaElement == null) return;

        mediaElement.Position = (TimeSpan)e.NewValue;
    }


}

现在您可以按如下方式使用它:

<MediaElement local:MediaElementExtension.BindablePosition="{Binding SomePropertyFromViewModel}"   />