首页 文章

绑定媒体元素和滑块

提问于
浏览
1

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

喜欢:-

<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 回答

  • 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}"   />
    

相关问题