• 基于MVVM的视屏播放器 windowsphone版


    直接上代码了  自己理解去吧

    VideoPlayer.xaml
    <phone:PhoneApplicationPage
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
        xmlns:interactions="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
        xmlns:SimpleMvvmToolkit="clr-namespace:SimpleMvvmToolkit;assembly=SimpleMvvmToolkit-WP7" 
        x:Class="Think.MTV.Views.VideoPlayer"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Landscape" Orientation="Landscape"
        mc:Ignorable="d" d:DesignHeight="480" d:DesignWidth="800"
        DataContext="{Binding VideoPlayerViewModel,Source={StaticResource Locator}}"
        shell:SystemTray.IsVisible="False">
        <i:Interaction.Triggers>
                    <i:EventTrigger>
                        <SimpleMvvmToolkit:EventToCommand Command="{Binding LoadCommand, Mode=OneWay}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
       
        <!--LayoutRoot 是包含所有页面内容的根网格-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
           <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="PlayPauseButtons">
                <VisualState x:Name="PlayButtonOn">
                    <!-- Switch to play button storyboard -->
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PauseButton">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.2">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Visible
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.5">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Collapsed
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PlayButton">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.5">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Visible
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="PauseButtonOn">
                    <!-- Switch to pause button storyboard -->
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PlayButton">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.2">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Visible
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.5">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Collapsed
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PauseButton">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.5">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Visible
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
         
            
            <VisualStateGroup x:Name="PlayerControlsAnimations">
                <VisualState x:Name="PlayerControlsBoxHidden">
                    <!-- Hide controls storyboard -->
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                        Storyboard.TargetName="PlayerControls">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.1">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Collapsed
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" 
                        Storyboard.TargetName="PlayerControls">
                            <EasingDoubleKeyFrame KeyTime="0" Value="1" />
                            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0" />
                        </DoubleAnimationUsingKeyFrames> 
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="PlayerControlsShown">
                    <!-- Show controls storyboard -->
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
                         Storyboard.TargetName="PlayerControls">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.1">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>
                                        Visible
                                    </Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"
                         Storyboard.TargetName="PlayerControls">
                            <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                            <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1" />
                        </DoubleAnimationUsingKeyFrames> 
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
            
        </VisualStateManager.VisualStateGroups>
            <i:Interaction.Behaviors>
            <interactions:DataStateBehavior Binding="{Binding ShowControls,Mode=TwoWay}" Value="true"
              TrueState="PlayerControlsShown" FalseState="PlayerControlsBoxHidden"/>
    
                <interactions:DataStateBehavior Binding="{Binding PlayButtonVisible}"
                                                Value="true" TrueState="PlayButtonOn"
                                                FalseState="PauseButtonOn" />
    
            </i:Interaction.Behaviors>
            
            <!--ContentPanel - 在此处放置其他内容-->
            <Grid x:Name="ContentPanel" Grid.Row="1"
                  Margin="12,0,12,0">
            
            
                
                <Grid x:Name="Player" Grid.Row="0" Grid.Column="0" RenderTransformOrigin="0.5,0.5" 
                      Margin="0,1,0,0" Grid.RowSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center">
                    <MediaElement x:Name="mediaElement"   Source="{Binding SelectedVideoMediaUrl,Mode=TwoWay}" 
                        VerticalAlignment="Center" HorizontalAlignment="Center" AutoPlay="False" 
                        d:LayoutOverrides="Width" Cursor="Arrow" Volume="1">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MediaOpened">
                                <SimpleMvvmToolkit:EventToCommand Command="{Binding MediaOpenedCommand}" CommandParameter="{Binding ElementName=mediaElement, Mode=OneWay}"/>
                            </i:EventTrigger>
                            <i:EventTrigger EventName="MouseLeftButtonDown">
                                <SimpleMvvmToolkit:EventToCommand Command="{Binding ShowPlayerControlsCommand}" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                        <!--<i:Interaction.Triggers>
                            <i:EventTrigger EventName="MediaOpened">
                                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MediaOpenedCommand}" 
                                CommandParameter="{Binding ElementName=mediaElement, Mode=OneWay}" />
                            </i:EventTrigger>
                            <i:EventTrigger EventName="MediaEnded">
                                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MediaEndedCommand}" />
                            </i:EventTrigger>
                            <i:EventTrigger EventName="MouseLeftButtonDown">
                                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding ShowPlayerControlsCommand}" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>-->
                    </MediaElement>
                </Grid>
                <Grid x:Name="PlayerControls" d:LayoutOverrides="GridBox" HorizontalAlignment="Stretch" 
                      VerticalAlignment="Bottom" Margin="0" RenderTransformOrigin="0.5,0.5" Height="117"
                      Background="#B2000000" Visibility="Collapsed">
                    <Grid.RenderTransform>
                        <CompositeTransform />
                    </Grid.RenderTransform>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="120" />
                        <ColumnDefinition Width="0.773*" />
                    </Grid.ColumnDefinitions>
                    <!--<i:Interaction.Triggers>
                        <i:EventTrigger EventName="MouseLeftButtonDown">
                            <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding ResetHideControlsCommand}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>-->
                    <Border x:Name="ProgressInfo" Grid.Column="1" BorderThickness="0" CornerRadius="0">
                        <Grid Margin="0,12,12,12">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="61" />
                                <RowDefinition Height="24" />
                            </Grid.RowDefinitions>
                            <TextBlock x:Name="ProgressDisplay" Text="{Binding CurrentProgress}" 
                                       Height="32" TextAlignment="Right" RenderTransformOrigin="0.5,0.5" Grid.Row="1"
                                       Margin="0" FontSize="15" FontFamily="Segoe WP Light" VerticalAlignment="Top" Foreground="White">
                  <TextBlock.RenderTransform>
                    <CompositeTransform />
                  </TextBlock.RenderTransform>
                            </TextBlock>
                            <ProgressBar x:Name="progressBar" Grid.Row="0" Maximum="{Binding TotalDuration}" 
                                         Value="{Binding CurrentPosition}" Margin="0,32,0,5" Height="Auto" 
                                         Style="{StaticResource PhoneProgressBarStyle}"
                                         Foreground="{StaticResource PhoneAccentBrush}" />
                            <Rectangle Height="40" Fill="#00000000" VerticalAlignment="Bottom">
                               <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="MouseLeftButtonDown">
                                        <SimpleMvvmToolkit:EventToCommand Command="{Binding SeekCommand}" PassEventArgsToCommand="True" />
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </Rectangle>
                        </Grid>
                    </Border>
                    <Border x:Name="Controls" Grid.Column="0" BorderThickness="0" CornerRadius="0" Margin="0,0,0,0">
                        <StackPanel Orientation="Horizontal">
                            <Button Visibility="Visible" x:Name="PlayButton" 
                            Content="Play" Width="120" Height="80" Style="{StaticResource PhoneButtonStylePlay}" Margin="0,19,0,18">
                                    
                               <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Click">
                                        <SimpleMvvmToolkit:EventToCommand Command="{Binding PauseVideoCommand}" />
                                        <!-- <SimpleMvvmToolkit:EventToCommand Command="{Binding ResetHideControlsCommand}" />-->
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </Button>
                            <Button Visibility="Collapsed" x:Name="PauseButton" Content="Play"
                             Width="120" Height="80" Style="{StaticResource PhoneButtonStylePause}"
                              Margin="0,19,0,18">
                               <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Click">
                                        <SimpleMvvmToolkit:EventToCommand Command="{Binding PauseVideoCommand}" />
                                       <!--  <SimpleMvvmToolkit:EventToCommand Command="{Binding ResetHideControlsCommand}" />-->
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </Button>
                        </StackPanel>
                    </Border>
                </Grid>
            </Grid>
        </Grid>
    </phone:PhoneApplicationPage>
    VideoPlayerViewModel
    using System;
    using System.Windows;
    using System.Threading;
    using System.Collections.ObjectModel;
    
    // Toolkit namespace
    using SimpleMvvmToolkit;
    
    // Toolkit extension methods
    using SimpleMvvmToolkit.ModelExtensions;
    using Think.MTV.Services;
    using Think.Model;
    using System.Windows.Input;
    using System.Windows.Controls;
    using System.IO;
    using System.Windows.Threading;
    
    namespace Think.MTV.ViewModels
    {
        /// <summary>
        /// This class contains properties that a View can data bind to.
        /// <para>
        /// Use the <strong>mvvmprop</strong> snippet to add bindable properties to this ViewModel.
        /// </para>
        /// </summary>
        public class VideoPlayerViewModel : ViewModelBase<VideoPlayerViewModel>
        {
            #region Initialization and Cleanup
    
            // TODO: Add a member for IXxxServiceAgent
            private IVideoServiceAgent serviceAgent;
    
            // Default ctor
            public VideoPlayerViewModel() { }
    
            // TODO: ctor that accepts IXxxServiceAgent
            public VideoPlayerViewModel(IVideoServiceAgent serviceAgent)
            {
                this.serviceAgent = serviceAgent;
                if (videoMediaElement != null) Play(videoMediaElement);
                DispatcherTimer timer = new DispatcherTimer
                {
                    Interval = new TimeSpan(0, 0, 5)
                };
                this.hideControlsTimer = timer;
                this.hideControlsTimer.Tick += new EventHandler(hideControlsTimer_Tick);
                DispatcherTimer timer2 = new DispatcherTimer
                {
                    Interval = new TimeSpan(0, 0, 5)
                };
    
            }
    
            void hideControlsTimer_Tick(object sender, EventArgs e)
            {
                if (this.ShowControls)
                {
                    this.ShowControls = false;
                }
            }
    
            #endregion
    
    
            #region Notifications
    
            // TODO: Add events to notify the view or obtain data from the view
            public event EventHandler<NotificationEventArgs<Exception>> ErrorNotice;
    
            #endregion
    
            #region Properties
    
            private DispatcherTimer hideControlsTimer;
            private DispatcherTimer hideExplicitTimer;
            private DispatcherTimer videoProgressTimer;
            private MediaElement videoMediaElement;
            private bool showControls;
            public bool ShowControls
            {
                get { return showControls; }
                set
                {
                    showControls = value;
    
                    if (value)
                    {
                        this.hideControlsTimer.Start();
                    }
                    else
                    {
                        this.hideControlsTimer.Stop();
                    }
    
                    this.NotifyPropertyChanged(p => p.ShowControls);
                }
            }
    
            private bool _PlayButtonVisible;
            public bool PlayButtonVisible
            {
                get
                {
                    return _PlayButtonVisible;
                }
    
                set
                {
                    _PlayButtonVisible = value;
                    this.NotifyPropertyChanged(p => p.PlayButtonVisible);
                }
            }
    
            private string currentProgress;
            public string CurrentProgress
            {
                get
                {
                    return this.currentProgress;
                }
                set
                {
                    this.currentProgress = value;
                    this.NotifyPropertyChanged(p => p.CurrentProgress);
                }
            }
    
            private double currentPosition;
            public double CurrentPosition
            {
                get
                {
                    return this.currentPosition;
                }
                set
                {
                    this.currentPosition = value;
                    this.NotifyPropertyChanged(p => p.CurrentPosition);
                }
            }
    
    
            private double totalDuration;
    
            public double TotalDuration
            {
                get
                {
                    return this.totalDuration;
                }
                set
                {
                    this.totalDuration = value;
                    this.NotifyPropertyChanged(p => p.TotalDuration);
                }
            }
    
            private Uri _SelectedVideoMediaUrl;
    
            public Uri SelectedVideoMediaUrl
            {
                get { return _SelectedVideoMediaUrl; }
                set
                {
                    _SelectedVideoMediaUrl = value;
                    this.NotifyPropertyChanged(p => p.SelectedVideoMediaUrl);
                }
            }
    
            private static Video myVideo;
    
            public static Video MyVideo
            {
                get { return myVideo; }
                set { myVideo = value; }
            }
            private VideoDetail _Video;
    
            public VideoDetail Video
            {
                get { return _Video; }
                set { _Video = value; }
            }
    
            // TODO: Add properties using the mvvmprop code snippet
    
            #endregion
            #region Command
            public ICommand LoadCommand
            {
                get
                {
                    return new DelegateCommand(LoadData);
                }
            }
    
            public ICommand MediaOpenedCommand
            {
                get
                {
                    return new DelegateCommand<MediaElement>(Play);
                }
            }
            public ICommand ShowPlayerControlsCommand
            {
                get { return new DelegateCommand(ShowPlayerControls); }
            }
    
            public ICommand SeekCommand
            {
                get
                {
                    return new DelegateCommand<object>(OnSeekCommand);
                }
            }
            public ICommand PauseVideoCommand
            {
                get
                {
                    return new DelegateCommand(PauseVideo);
                }
            }
    
            #endregion
    
            #region Methods
    
            public void PauseVideo()
            {
                if (this.videoMediaElement.CurrentState == System.Windows.Media.MediaElementState.Playing)
                {
                    if (this.videoMediaElement.CanPause)
                    {
                        this.videoMediaElement.Pause();
                        this.PlayButtonVisible = true;
    
                    }
                    else
                    {
                        this.videoMediaElement.Stop();
                    }
                    if (this.videoProgressTimer.IsEnabled)
                    {
                        this.videoProgressTimer.Stop();
                    }
                }
                else
                {
                    this.videoMediaElement.Play();
                    this.videoProgressTimer.Start();
                    this.PlayButtonVisible = false;
    
                }
            }
    
    
            private void OnSeekCommand(object obj)
            {
                if (obj is MouseButtonEventArgs)
                {
                    FrameworkElement element = (FrameworkElement)(obj as MouseButtonEventArgs).OriginalSource;
                    double percentComplete = (obj as MouseButtonEventArgs).GetPosition(element).X / element.ActualWidth;
                    this.Seek(percentComplete);
                }
            }
    
            private void Seek(double percentComplete)
            {
                int seconds = (int)(this.videoMediaElement.NaturalDuration.TimeSpan.TotalSeconds * percentComplete);
                this.videoMediaElement.Position = new TimeSpan(0, 0, seconds);
                this.SetCurrentPosition();
            }
    
    
    
    
    
    
    
    
            private void ShowPlayerControls()
            {
                ShowControls = !ShowControls;
            }
            // TODO: Add methods that will be called by the view
            private void LoadData()
            {
                if (MyVideo != null && Video != MyVideo)
                    serviceAgent.GetVideoData(MyVideo, (vd, error) =>
                    {
                        Video = vd;
                        SelectedVideoMediaUrl = new Uri(Video.VideoSrc);
    
                    });
            }
    
    
            private void Play(MediaElement me)
            {
                MediaElement element = me;
                this.videoMediaElement = element;
    
                me.Play();
                DispatcherTimer timer = new DispatcherTimer();
                timer.Interval = (TimeSpan.FromSeconds(1.0));
                this.videoProgressTimer = timer;
                videoProgressTimer.Tick += new EventHandler(videoProgressTimer_Tick);
                this.SetCurrentPosition();
    
                this.PlayVideo(null);
    
    
            }
    
            private void SetCurrentPosition()
            {
                if ((this.CurrentPosition > 0.0) && (this.CurrentPosition >= this.TotalDuration))
                {
                    this.CurrentPosition = 0.0;
                    this.StopVideo(null);
                }
                int arg = this.videoMediaElement.Position.Seconds;
    
                this.CurrentProgress = string.Format("{0}:{1} / {2}:{3}", new object[] 
                {
                    Math.Floor(this.videoMediaElement.Position.TotalMinutes).ToString("00"), 
                    this.videoMediaElement.Position.Seconds.ToString("00"),
                    Math.Floor(this.videoMediaElement.NaturalDuration.TimeSpan.TotalMinutes).ToString("00"), 
                    this.videoMediaElement.NaturalDuration.TimeSpan.Seconds.ToString("00") 
                });
    
                this.CurrentPosition = this.videoMediaElement.Position.TotalSeconds;
                this.TotalDuration = this.videoMediaElement.NaturalDuration.TimeSpan.TotalSeconds;
    
    
            }
            public void PlayVideo(object param)
            {
                this.videoMediaElement.Play();
                this.videoProgressTimer.Start();
                this.PlayButtonVisible = false;
            }
    
    
            public void StopVideo(object param)
            {
                this.videoMediaElement.Stop();
                this.videoProgressTimer.Stop();
                this.SetCurrentPosition();
            }
    
            void videoProgressTimer_Tick(object sender, EventArgs e)
            {
                this.SetCurrentPosition();
    
            }
            #endregion
    
            #region Completion Callbacks
    
            // TODO: Optionally add callback methods for async calls to the service agent
    
            #endregion
    
            #region Helpers
    
            // Helper method to notify View of an error
            private void NotifyError(string message, Exception error)
            {
                // Notify view of an error
                Notify(ErrorNotice, new NotificationEventArgs<Exception>(message, error));
            }
    
            #endregion
    
        }
    }
    VideoPlayerStyle.xaml
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
        <Style x:Key="PhoneProgressBarStyle" TargetType="ProgressBar">
            <Setter Property="Foreground" Value="{StaticResource PhoneAccentBrush}" />
            <Setter Property="Background" Value="{StaticResource PhoneBackgroundBrush}" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Height" Value="4" />
            <Setter Property="Maximum" Value="100" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ProgressBar">
                        <Grid x:Name="Root">
                            <Grid.Resources>
                                <Style x:Key="PhoneProgressBarSliderStyle" TargetType="Slider">
                                    <Setter Property="Maximum" Value="3000" />
                                    <Setter Property="Minimum" Value="0" />
                                    <Setter Property="Height" Value="8" />
                                    <Setter Property="Value" Value="0" />
                                    <Setter Property="IsTabStop" Value="False" />
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="Slider">
                                                <Grid x:Name="Root">
                                                    <Grid.Resources>
                                                        <ControlTemplate x:Key="SliderThumb" TargetType="Thumb">
                                                            <Ellipse Fill="{TemplateBinding Foreground}" Height="{TemplateBinding Width}" Width="{TemplateBinding Width}" />
                                                        </ControlTemplate>
                                                    </Grid.Resources>
                                                    <Grid x:Name="HorizontalTemplate" Background="{TemplateBinding Background}">
                                                        <Grid.ColumnDefinitions>
                                                            <ColumnDefinition Width="Auto" />
                                                            <ColumnDefinition Width="Auto" />
                                                            <ColumnDefinition Width="*" />
                                                        </Grid.ColumnDefinitions>
                                                        <RepeatButton x:Name="HorizontalTrackLargeChangeDecreaseRepeatButton" Grid.Column="2" Template="{x:Null}" />
                                                        <Thumb x:Name="HorizontalThumb" Grid.Column="1" Height="{TemplateBinding Height}" IsTabStop="False" Template="{StaticResource SliderThumb}" Width="{TemplateBinding Height}" />
                                                        <RepeatButton x:Name="HorizontalTrackLargeChangeIncreaseRepeatButton" Grid.Column="2" Template="{x:Null}" />
                                                    </Grid>
                                                </Grid>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </Grid.Resources>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Determinate" />
                                    <VisualState x:Name="Indeterminate">
                                        <Storyboard RepeatBehavior="Forever">
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="IndeterminateRoot">
                                                <DiscreteObjectKeyFrame KeyTime="0">
                                                    <DiscreteObjectKeyFrame.Value>
                                                        <Visibility>
                                                            Visible
                                                        </Visibility>
                                                    </DiscreteObjectKeyFrame.Value>
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DeterminateRoot">
                                                <DiscreteObjectKeyFrame KeyTime="0">
                                                    <DiscreteObjectKeyFrame.Value>
                                                        <Visibility>
                                                            Collapsed
                                                        </Visibility>
                                                    </DiscreteObjectKeyFrame.Value>
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ProgressBarTrack">
                                                <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="0" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.0" Duration="00:00:02.9" Storyboard.TargetProperty="value" Storyboard.TargetName="slider1">
                                                <LinearDoubleKeyFrame KeyTime="00:00:00.4" Value="1000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.4" Value="2000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.8" Value="3000" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.2" Duration="00:00:02.9" Storyboard.TargetProperty="value" Storyboard.TargetName="slider2">
                                                <LinearDoubleKeyFrame KeyTime="00:00:00.4" Value="1000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.4" Value="2000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.8" Value="3000" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.4" Duration="00:00:02.9" Storyboard.TargetProperty="value" Storyboard.TargetName="slider3">
                                                <LinearDoubleKeyFrame KeyTime="00:00:00.4" Value="1000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.4" Value="2000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.8" Value="3000" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.6" Duration="00:00:02.9" Storyboard.TargetProperty="value" Storyboard.TargetName="slider4">
                                                <LinearDoubleKeyFrame KeyTime="00:00:00.4" Value="1000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.4" Value="2000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.8" Value="3000" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.8" Duration="00:00:02.9" Storyboard.TargetProperty="value" Storyboard.TargetName="slider5">
                                                <LinearDoubleKeyFrame KeyTime="00:00:00.4" Value="1000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.4" Value="2000" />
                                                <LinearDoubleKeyFrame KeyTime="00:00:02.8" Value="3000" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.0" Duration="00:00:02.9" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="slider1">
                                                <DiscreteDoubleKeyFrame KeyTime="00:00:02.8" Value="0" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.2" Duration="00:00:02.9" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="slider2">
                                                <DiscreteDoubleKeyFrame KeyTime="00:00:02.8" Value="0" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.4" Duration="00:00:02.9" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="slider3">
                                                <DiscreteDoubleKeyFrame KeyTime="00:00:02.8" Value="0" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.6" Duration="00:00:02.9" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="slider4">
                                                <DiscreteDoubleKeyFrame KeyTime="00:00:02.8" Value="0" />
                                            </DoubleAnimationUsingKeyFrames>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.8" Duration="00:00:02.9" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="slider5">
                                                <DiscreteDoubleKeyFrame KeyTime="00:00:02.8" Value="0" />
                                            </DoubleAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="ProgressBarTrack" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Opacity="0.3" Background="Black" />
                            <Grid x:Name="ProgressBarRootGrid">
                                <Grid x:Name="IndeterminateRoot" Visibility="Collapsed">
                                    <Slider x:Name="slider1" Height="{TemplateBinding Height}" Style="{StaticResource PhoneProgressBarSliderStyle}" />
                                    <Slider x:Name="slider2" Height="{TemplateBinding Height}" Style="{StaticResource PhoneProgressBarSliderStyle}" />
                                    <Slider x:Name="slider3" Height="{TemplateBinding Height}" Style="{StaticResource PhoneProgressBarSliderStyle}" />
                                    <Slider x:Name="slider4" Height="{TemplateBinding Height}" Style="{StaticResource PhoneProgressBarSliderStyle}" />
                                    <Slider x:Name="slider5" Height="{TemplateBinding Height}" Style="{StaticResource PhoneProgressBarSliderStyle}" />
                                </Grid>
                                <Grid x:Name="DeterminateRoot" Visibility="Visible">
                                    <Border x:Name="ProgressBarIndicator" HorizontalAlignment="Left" d:IsHidden="True" Background="#FFDC2100" BorderBrush="White" BorderThickness="0,0,0,0" />
                                </Grid>
                            </Grid>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
        <Style x:Key="PhoneButtonStylePause" TargetType="Button">
            <Setter Property="Background" Value="{StaticResource TransparentBrush}" />
            <Setter Property="BorderBrush" Value="{StaticResource PhoneAccentBrush}" />
            <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}" />
            <Setter Property="MinHeight" Value="72" />
            <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}" />
            <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}" />
            <Setter Property="Padding" Value="10,0,10,5" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid Background="Transparent">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal" />
                                    <VisualState x:Name="MouseOver" />
                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.Foreground" Storyboard.TargetName="foregroundContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFDC2100" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Border.Background" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFDC2100" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Border.BorderBrush" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFDC2100" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Shape.Fill" Storyboard.TargetName="PauseIcon">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFFFFFFF" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Disabled">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.Foreground" Storyboard.TargetName="foregroundContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.BorderBrush" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource TransparentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused" />
                                    <VisualState x:Name="Unfocused" />
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="ButtonBackground" BorderThickness="3" Background="#00FFFFFF" CornerRadius="50" Margin="23,3" BorderBrush="White">
                                <Grid>
                                    <ContentControl x:Name="foregroundContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Visibility="Collapsed" />
                                    <Path x:Name="PauseIcon" Data="M71.999985,1.5020368E-05 L111.99998,1.5020368E-05 L111.99998,75.000008 L71.999985,75.000008 z M0,0 L40,0 L40,75 L0,75 z" Fill="#FFFFFFFF" Stretch="Fill" UseLayoutRounding="False" RenderTransformOrigin="0.5,0.5" Margin="0,10.556">
                                        <Path.RenderTransform>
                                            <CompositeTransform ScaleX="0.35" ScaleY="0.6" />
                                        </Path.RenderTransform>
                                    </Path>
                                </Grid>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="PhoneButtonStylePlay" TargetType="Button">
            <Setter Property="Background" Value="{StaticResource TransparentBrush}" />
            <Setter Property="BorderBrush" Value="{StaticResource PhoneAccentBrush}" />
            <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}" />
            <Setter Property="MinHeight" Value="72" />
            <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}" />
            <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}" />
            <Setter Property="Padding" Value="10,0,10,5" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid Background="Transparent">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal" />
                                    <VisualState x:Name="MouseOver" />
                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.Foreground" Storyboard.TargetName="foregroundContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFDC2100" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Border.Background" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFDC2100" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Border.BorderBrush" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFDC2100" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Shape.Fill" Storyboard.TargetName="PlayIcon">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="#FFFFFFFF" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Disabled">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.Foreground" Storyboard.TargetName="foregroundContainer">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.BorderBrush" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="ButtonBackground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource TransparentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused" />
                                    <VisualState x:Name="Unfocused" />
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="ButtonBackground" BorderThickness="3" Background="#00FFFFFF" CornerRadius="50" Margin="23,3" BorderBrush="White">
                                <Grid>
                                    <ContentControl x:Name="foregroundContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Visibility="Collapsed" />
                                    <Path x:Name="PlayIcon" Stretch="Fill" Data="F1 M26.6633,15.998 C17.775534,21.330667 0,31.996 0,31.996 C0,31.996 0,1.52588E-05 0,1.52588E-05 C0,1.52588E-05 17.775534,10.665339 26.6633,15.998 z" UseLayoutRounding="False" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" Height="59.154" Fill="White" Margin="5.25,0,-5.25,0">
                                        <Path.RenderTransform>
                                            <CompositeTransform ScaleX="0.4" ScaleY="0.65" TranslateX="-1.7881393432617188E-07" TranslateY="-2.384185791015625E-07" />
                                        </Path.RenderTransform>
                                    </Path>
                                </Grid>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style> 
    </ResourceDictionary>

    搞定

    转载请注明文章出处:http://www.cnblogs.com/thinkaspx/

  • 相关阅读:
    SpringCloud Alibaba Nacos详解
    常见设计模式
    Mybatis TypeHandler类型处理器
    Mybatis存取json字段转为Java对象方案
    Spring AOP 切面编程详解
    Spring Data 、Spring Data JPA 、Hibernate之间的关系及SpringDataJPA简单使用
    28张图解 | 互联网究竟是「如何连接,如何进行通信」的?
    Java代码实现 图片添加多行水印且自动换行
    SpringMVC 快速入门
    获取本地磁盘得到.txt文件
  • 原文地址:https://www.cnblogs.com/thinkaspx/p/2633511.html
Copyright © 2020-2023  润新知