欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于WPF實(shí)現(xiàn)一個簡單的音頻播放動畫控件

 更新時間:2022年07月29日 11:14:39   作者:驚鏵  
這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)一個簡單的音頻播放動畫控件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下

1.實(shí)現(xiàn)代碼

一、創(chuàng)建AnimationAudio.xaml代碼如下

<ResourceDictionary?xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
????????????????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
????????????????????xmlns:controls="clr-namespace:WPFDevelopers.Controls"
????????????????????xmlns:helpers="clr-namespace:WPFDevelopers.Helpers">

????<ResourceDictionary.MergedDictionaries>
????????<ResourceDictionary?Source="Basic/ControlBasic.xaml"/>
????????<ResourceDictionary?Source="Basic/Animations.xaml"/>
????</ResourceDictionary.MergedDictionaries>

????

????<Style?TargetType="{x:Type?controls:AnimationAudio}"?BasedOn="{StaticResource?ControlBasicStyle}">
????????<Setter?Property="Width"?Value="80"/>
????????<Setter?Property="Height"?Value="35"/>
????????<Setter?Property="Cursor"?Value="Hand"/>
????????<Setter?Property="Foreground"?Value="{DynamicResource?WhiteSolidColorBrush}"/>
????????<Setter?Property="Background"?Value="{DynamicResource?PrimaryNormalSolidColorBrush}"/>
????????<Setter?Property="Template">
????????????<Setter.Value>
????????????????<ControlTemplate?TargetType="{x:Type?controls:AnimationAudio}">
????????????????????<ControlTemplate.Resources>
????????????????????????<Storyboard?x:Key="PlayStoryboard"?RepeatBehavior="Forever">
????????????????????????????<ObjectAnimationUsingKeyFrames?Storyboard.TargetName="PathAudioTwo"?Storyboard.TargetProperty="(Path.Visibility)">
????????????????????????????????<DiscreteObjectKeyFrame?KeyTime="0:0:0"?Value="{x:Static?Visibility.Hidden}"?/>
????????????????????????????</ObjectAnimationUsingKeyFrames>
????????????????????????????<ObjectAnimationUsingKeyFrames?Storyboard.TargetName="PathAudioThree"?Storyboard.TargetProperty="(Path.Visibility)">
????????????????????????????????<DiscreteObjectKeyFrame?KeyTime="0:0:0"?Value="{x:Static?Visibility.Hidden}"?/>
????????????????????????????</ObjectAnimationUsingKeyFrames>

????????????????????????????<ObjectAnimationUsingKeyFrames?BeginTime="0:0:.3"?Duration="0:0:.4"?Storyboard.TargetName="PathAudioTwo"
???????????????????????????????????????Storyboard.TargetProperty="(Path.Visibility)">
????????????????????????????????<DiscreteObjectKeyFrame?KeyTime="0:0:0"?Value="{x:Static?Visibility.Visible}"?/>
????????????????????????????</ObjectAnimationUsingKeyFrames>
????????????????????????????<ObjectAnimationUsingKeyFrames?BeginTime="0:0:.7"?Duration="0:0:.4"?Storyboard.TargetName="PathAudioThree"
???????????????????????????????????????Storyboard.TargetProperty="(Path.Visibility)">
????????????????????????????????<DiscreteObjectKeyFrame?KeyTime="0:0:0"?Value="{x:Static?Visibility.Visible}"?/>
????????????????????????????</ObjectAnimationUsingKeyFrames>
????????????????????????</Storyboard>
????????????????????</ControlTemplate.Resources>
????????????????????<Border?x:Name="PART_Border"?Background="{TemplateBinding?Background}"?
????????????????????????????CornerRadius="{TemplateBinding?helpers:ControlsHelper.CornerRadius}"
????????????????????????????SnapsToDevicePixels="True"?UseLayoutRounding="True">
????????????????????????<Grid>
????????????????????????????<Grid.ColumnDefinitions>
????????????????????????????????<ColumnDefinition/>
????????????????????????????????<ColumnDefinition/>
????????????????????????????</Grid.ColumnDefinitions>
????????????????????????????<StackPanel?Width="20"?Height="30"?HorizontalAlignment="Left"?
????????????????????????????????????????Orientation="Horizontal"?Margin="10,0"
????????????????????????????????????????RenderTransformOrigin=".5,.5"
????????????????????????????????????????x:Name="PART_StackPanel">
????????????????????????????????
????????????????????????????????<Path?Data="{StaticResource?PathAudioOne}"?Width="4"?Height="6"?
??????????????????????????????????????Stretch="Fill"?Fill="{TemplateBinding?Foreground}"/>
????????????????????????????????<Path?x:Name="PathAudioTwo"?Data="{StaticResource?PathAudioTwo}"?Width="6"?StrokeThickness="1.5"?
??????????????????????????????????????Stroke="Transparent"?
??????????????????????????????????????Margin="0,7"?Stretch="Fill"?Fill="{TemplateBinding?Foreground}"/>
????????????????????????????????<Path?x:Name="PathAudioThree"?Data="{StaticResource?PathAudioThree}"?Width="8"?Margin="-3,4"?Stretch="Fill"?
??????????????????????????????????????Fill="{TemplateBinding?Foreground}"?StrokeThickness="2"?Stroke="Transparent"/>
????????????????????????????</StackPanel>
????????????????????????????<TextBlock?VerticalAlignment="Center"?
???????????????????????????????????????Foreground="{TemplateBinding?Foreground}"
???????????????????????????????????????FontSize="{DynamicResource?TitleFontSize}"
???????????????????????????????????????Grid.Column="1"
???????????????????????????????????????x:Name="PART_TextBlock">
????????????????????????????????<Run?x:Name="PART_RunTimeLength"></Run>
????????????????????????????</TextBlock>
????????????????????????</Grid>
????????????????????</Border>
????????????????????<ControlTemplate.Triggers>
????????????????????????<Trigger?Property="IsPlay"?Value="True">
????????????????????????????<Trigger.EnterActions>
????????????????????????????????<BeginStoryboard?x:Name="PlayBeginStoryboard"?Storyboard="{StaticResource?PlayStoryboard}"/>
????????????????????????????</Trigger.EnterActions>
????????????????????????????<Trigger.ExitActions>
????????????????????????????????<StopStoryboard?BeginStoryboardName="PlayBeginStoryboard"/>
????????????????????????????</Trigger.ExitActions>
????????????????????????</Trigger>
????????????????????????<Trigger?Property="IsRight"?Value="True">
????????????????????????????<Setter?Property="Grid.Column"?TargetName="PART_TextBlock"?Value="0"/>
????????????????????????????<Setter?Property="HorizontalAlignment"?TargetName="PART_TextBlock"?Value="Right"/>
????????????????????????????<Setter?Property="Grid.Column"?TargetName="PART_StackPanel"?Value="1"/>
????????????????????????????<Setter?Property="HorizontalAlignment"?TargetName="PART_StackPanel"?Value="Right"/>
????????????????????????????<Setter?Property="RenderTransform"?TargetName="PART_StackPanel">
????????????????????????????????<Setter.Value>
????????????????????????????????????<TransformGroup>
????????????????????????????????????????<RotateTransform?Angle="180"/>
????????????????????????????????????</TransformGroup>
????????????????????????????????</Setter.Value>
????????????????????????????</Setter>
????????????????????????</Trigger>
????????????????????</ControlTemplate.Triggers>
????????????????</ControlTemplate>
????????????</Setter.Value>
????????</Setter>
????</Style>

</ResourceDictionary>

二、創(chuàng)建AnimationAudioe.cs代碼如下

using?System;
using?System.IO;
using?System.Linq;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Documents;
using?System.Windows.Interop;
using?WPFDevelopers.Helpers;

namespace?WPFDevelopers.Controls
{
????[TemplatePart(Name?=?RunTemplateName,?Type?=?typeof(Run))]
????public?partial?class?AnimationAudio?:?Control
????{
????????const?string?RunTemplateName?=?"PART_RunTimeLength";

????????private?Run?_run;
????????private?TimeSpan?_timeSpan;
????????private?IntPtr?_handle;
????????private?AudioWindow?_win?=?null;

????????static?string[]?mediaExtensions?=?{?".MP3",?".WAV"?};
????????///?<summary>
????????///?音頻路徑
????????///?</summary>
????????public?string?AudioPath
????????{
????????????get?{?return?(string)GetValue(AudioPathProperty);?}
????????????set?{?SetValue(AudioPathProperty,?value);?}
????????}
????????public?static?readonly?DependencyProperty?AudioPathProperty?=
????????????DependencyProperty.Register("AudioPath",?typeof(string),?typeof(AnimationAudio),?new?PropertyMetadata(string.Empty));

????????///?<summary>
????????///?是否右側(cè)
????????///?</summary>
????????public?bool?IsRight
????????{
????????????get?{?return?(bool)GetValue(IsRightProperty);?}
????????????set?{?SetValue(IsRightProperty,?value);?}
????????}
????????public?static?readonly?DependencyProperty?IsRightProperty?=
????????????DependencyProperty.Register("IsRight",?typeof(bool),?typeof(AnimationAudio),?new?PropertyMetadata(false));

????????public?bool?IsPlay
????????{
????????????get?{?return?(bool)GetValue(IsPlayProperty);?}
????????????set?{?SetValue(IsPlayProperty,?value);?}
????????}

????????public?static?readonly?DependencyProperty?IsPlayProperty?=
????????????DependencyProperty.Register("IsPlay",?typeof(bool),?typeof(AnimationAudio),?new?PropertyMetadata(false,?new?PropertyChangedCallback(OnIsPlayChanged)));

????????private?static?void?OnIsPlayChanged(DependencyObject?d,?DependencyPropertyChangedEventArgs?e)
????????{
????????????bool?newValue?=?(bool)e.NewValue;
????????????var?animationAudio?=?d?as?AnimationAudio;
????????????if(newValue?!=?(bool)e.OldValue)
????????????{
????????????????if?(newValue)
????????????????{
????????????????????animationAudio.Play();
????????????????}
????????????????else
????????????????{
????????????????????AudioPlayer.Stop();
????????????????}
????????????}
????????}

????????static?AnimationAudio()
????????{
????????????DefaultStyleKeyProperty.OverrideMetadata(typeof(AnimationAudio),?new?FrameworkPropertyMetadata(typeof(AnimationAudio)));
????????}

???????
????????public?override?void?OnApplyTemplate()
????????{
????????????base.OnApplyTemplate();
????????????_run?=?GetTemplateChild(RunTemplateName)?as?Run;
????????????if?(string.IsNullOrWhiteSpace(AudioPath))?return;
????????????if?(!File.Exists(AudioPath))?return;
????????????if?(!mediaExtensions.Contains(Path.GetExtension(AudioPath),?StringComparer.OrdinalIgnoreCase))?return;
????????????_timeSpan?=?AudioPlayer.GetSoundLength(AudioPath);
????????????if?(_timeSpan?==?TimeSpan.Zero)?return;
????????????_run.Text?=?$"{_timeSpan.Seconds.ToString()}\"";
????????????Width?=?80;
????????????if?(_timeSpan.Seconds?>?5)
????????????{
????????????????Width?+=?_timeSpan.Seconds;
????????????}
????????}

????????private?void?Play()
????????{
????????????if(_win?!=?null)
????????????{
????????????????_win.Close();
????????????????_win?=?null;
????????????}
????????????_win?=?new?AudioWindow
????????????{
????????????????Width?=?0,
????????????????Height?=?0,
????????????????Left?=?Int32.MinValue,
????????????????Top?=?Int32.MinValue,
????????????????WindowStyle?=?WindowStyle.None,
????????????????ShowInTaskbar?=?false,
????????????????ShowActivated?=?false,
????????????};
????????????_win.Show();
????????????_win.StopDelegateEvent?+=?_win_StopDelegateEvent;
????????????_handle?=?new?WindowInteropHelper(_win).Handle;
????????????AudioPlayer.PlaySong(AudioPath,?_handle);
????????}

???????
????????private?void?_win_StopDelegateEvent()
????????{
????????????IsPlay?=?false;
????????????_win.Close();
????????????_win?=?null;
????????}
????}
}

三、新建AudioWindow.cs代碼如下

using?System;
using?System.Windows;
using?System.Windows.Interop;

namespace?WPFDevelopers.Controls
{
????public?class?AudioWindow:Window
????{
????????const?int?MM_MCINOTIFY?=?0x3B9;
????????public?delegate?void?StopDelegate();
????????public?event?StopDelegate?StopDelegateEvent;
????????
????????protected?override?void?OnSourceInitialized(EventArgs?e)
????????{
????????????base.OnSourceInitialized(e);
????????????HwndSource?hwndSource?=?PresentationSource.FromVisual(this)?as?HwndSource;
????????????if?(hwndSource?!=?null)
????????????{
????????????????hwndSource.AddHook(new?HwndSourceHook(this.WndProc));
????????????}
????????}
????????
????????IntPtr?WndProc(IntPtr?hwnd,?int?msg,?IntPtr?wParam,?IntPtr?lParam,?ref?bool?handled)
????????{
????????????switch?(msg)
????????????{
????????????????case?MM_MCINOTIFY:
????????????????????StopDelegateEvent?.Invoke();
????????????????????break;
????????????}
????????????return?IntPtr.Zero;
????????}
????}
}

四、新建AnimationAudioExample.xaml代碼如下。

??<UserControl?x:Class="WPFDevelopers.Samples.ExampleViews.AnimationAudioExample"
?????????????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
?????????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
?????????????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"?
?????????????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"?
?????????????xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"
?????????????xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"
?????????????mc:Ignorable="d"?
?????????????d:DesignHeight="450"?d:DesignWidth="800">

????<UniformGrid?Columns="2"?x:Name="MyUniformGrid">
????????<StackPanel?Orientation="Horizontal">
????????????<wpfdev:BreathLamp?Width="60"?Height="60"?
???????????????????????????????LampEffect="Ripple"
???????????????????????????????IsLampStart="true"
???????????????????????????????Margin="10,0">
????????????????<Ellipse?Width="50"?Height="50">
????????????????????<Ellipse.Fill>
????????????????????????<ImageBrush?ImageSource="pack://application:,,,/WPFDevelopers.Samples;component/Images/Breathe/0.jpg"/>
????????????????????</Ellipse.Fill>
????????????????</Ellipse>
????????????</wpfdev:BreathLamp>
????????????<wpfdev:AnimationAudio?x:Name="AnimationAudioLeft"?MouseDown="AnimationAudioLeft_MouseDown"/>
????????</StackPanel>
????????<StackPanel?Orientation="Horizontal"
????????????????????HorizontalAlignment="Right">
????????????<wpfdev:AnimationAudio?x:Name="AnimationAudioRight"?IsRight?="true"?
???????????????????????????????Background="{DynamicResource?SuccessSolidColorBrush}"
???????????????????????????????Foreground="Black"
???????????????????????????????MouseDown="AnimationAudioLeft_MouseDown"/>
????????????<wpfdev:BreathLamp?Width="50"?Height="50"?
???????????????????????????????LampEffect="Streamer"
???????????????????????????????Background="LightGray"
???????????????????????????????IsLampStart="True"
???????????????????????????????Margin="10,0">
????????????????<Ellipse?Width="43"?Height="43">
????????????????????<Ellipse.Fill>
????????????????????????<ImageBrush?ImageSource="pack://application:,,,/WPFDevelopers.Samples;component/Images/Chat/UserImages/yanjinhua.png"/>
????????????????????</Ellipse.Fill>
????????????????</Ellipse>
????????????</wpfdev:BreathLamp>
????????</StackPanel>
???????
????</UniformGrid>
</UserControl>
?????????????????

六、新建AnimationAudioExample.xaml.cs下

using?System;
using?System.IO;
using?System.Windows.Controls;
using?WPFDevelopers.Controls;
using?WPFDevelopers.Samples.Helpers;

namespace?WPFDevelopers.Samples.ExampleViews
{
????///?<summary>
????///?微信公眾號:WPF開發(fā)者
????///?</summary>
????public?partial?class?AnimationAudioExample?:?UserControl
????{
????????public?AnimationAudioExample()
????????{
????????????InitializeComponent();
????????????AnimationAudioLeft.AudioPath?=?Path.Combine(AppDomain.CurrentDomain.BaseDirectory,?"Resources",?"Audio",?"HelloWPFDevelopes_en.mp3");
????????????AnimationAudioRight.AudioPath?=?Path.Combine(AppDomain.CurrentDomain.BaseDirectory,?"Resources",?"Audio",?"HelloWPFDevelopes_zh.mp3");
????????}

????????private?void?AnimationAudioLeft_MouseDown(object?sender,?System.Windows.Input.MouseButtonEventArgs?e)
????????{
????????????var?animationAudio?=?sender?as?AnimationAudio;
????????????var?animationAudioList?=?ElementVisualTreeHelper.FindVisualChild<AnimationAudio>(MyUniformGrid);
????????????if?(animationAudioList?==?null)?return;
????????????if?(!animationAudio.IsPlay)
????????????{
????????????????animationAudioList.ForEach(h?=>
????????????????{
????????????????????if?(h.IsPlay?&&?h?!=?animationAudio)
????????????????????{
????????????????????????h.IsPlay?=?false;
????????????????????}
????????????????});
????????????????animationAudio.IsPlay?=?true;
????????????}
????????????else
????????????????animationAudio.IsPlay?=?false;
????????}
????}
}

2.效果預(yù)覽

到此這篇關(guān)于基于WPF實(shí)現(xiàn)一個簡單的音頻播放動畫控件的文章就介紹到這了,更多相關(guān)WPF音頻播放動畫控件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中實(shí)現(xiàn)查找mysql的安裝路徑

    C#中實(shí)現(xiàn)查找mysql的安裝路徑

    這篇文章主要介紹了C#中實(shí)現(xiàn)查找mysql的安裝路徑,本文講解使用SQL語句查詢出mysql的安裝路徑,方便在備份時使用,需要的朋友可以參考下
    2015-06-06
  • C# ListBox中的Item拖拽代碼分享

    C# ListBox中的Item拖拽代碼分享

    在本文中我們給大家分享了關(guān)于C#的ListBox中的Item拖拽的功能代碼分享,對此有需要的朋友參考學(xué)習(xí)下。
    2018-03-03
  • C#實(shí)現(xiàn)連接電子秤串口自動稱重

    C#實(shí)現(xiàn)連接電子秤串口自動稱重

    這篇文章介紹了C#實(shí)現(xiàn)連接電子秤串口自動稱重的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#里SuperSocket庫不能發(fā)現(xiàn)命令的原因

    C#里SuperSocket庫不能發(fā)現(xiàn)命令的原因

    這篇文章主要介紹C#里SuperSocket庫不能發(fā)現(xiàn)命令的原因,在使用SuperSocket來寫服務(wù)器的過程中,這是一個非常快速的開發(fā)方式,也非常好用。不過學(xué)習(xí)的曲線有點(diǎn)高,在使用的過程中經(jīng)常會遇到各種各樣的問題。下面來看看學(xué)習(xí)舉例說明吧
    2021-10-10
  • 基于C#制作一個顏色拾取器

    基于C#制作一個顏色拾取器

    這篇文章主要為大家詳細(xì)介紹了如何基于C#制作一個顏色拾取器,可以獲取屏幕上任意位置像素的色值,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下
    2024-01-01
  • C#中關(guān)于序列化與反序列化的三種方法

    C#中關(guān)于序列化與反序列化的三種方法

    序列化是將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程,本文主要介紹了C#中關(guān)于序列化與反序列化的三種方法,文章具有一定的參考價值,感興趣的可以了解一下
    2022-03-03
  • C#代碼實(shí)現(xiàn)對AES加密解密

    C#代碼實(shí)現(xiàn)對AES加密解密

    這篇文章主要介紹了C#代碼實(shí)現(xiàn)對AES加密解密的相關(guān)資料,AES是一個新的可以用于保護(hù)電子數(shù)據(jù)的加密算法,需要的朋友可以參考下
    2015-12-12
  • C#中如何將MongoDB->RunCommand結(jié)果映射到業(yè)務(wù)類的方法總結(jié)

    C#中如何將MongoDB->RunCommand結(jié)果映射到業(yè)務(wù)類的方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于C#中如何將MongoDB->RunCommand結(jié)果映射到業(yè)務(wù)類的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2018-04-04
  • C#實(shí)現(xiàn)將字符串轉(zhuǎn)化為日期格式的方法詳解

    C#實(shí)現(xiàn)將字符串轉(zhuǎn)化為日期格式的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C#如何使用DateTime結(jié)構(gòu)的ParseExact方法和Parse方法分別將字符串轉(zhuǎn)化為日期格式,有需要的小伙伴可以了解一下
    2024-01-01
  • C#在DataTable中根據(jù)條件刪除某一行的實(shí)現(xiàn)方法

    C#在DataTable中根據(jù)條件刪除某一行的實(shí)現(xiàn)方法

    我們通常的方法是把數(shù)據(jù)源放在DataTable里面,但是偶爾也會需要把不要的行移除,怎么實(shí)現(xiàn)呢,下面通過代碼給大家介紹c# atatable 刪除行的方法,需要的朋友一起看下吧
    2016-05-05

最新評論