基于MVVM的视屏播放器 windowsphone版

基于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/

你可能感兴趣的:(windows)