WPF音乐播放器 零基础4个小时左右

前言:winfrom转wpf用久的熟手说得最多的是,转回去做winfrom难。。当时不明白。。做一个就知道了。

WPF音乐播放器

入口主程序

 FontFamily="Microsoft YaHei" FontSize="12" FontWeight="ExtraLight"
居中显示WindowStartupLocation="CenterScreen" ResizeMode="NoResize"Title="音娱乐行音乐播放器" Height="600" Width="1010"
无边框 
<WindowChrome.WindowChrome><WindowChrome GlassFrameThickness="1"/></WindowChrome.WindowChrome>
StackPanel 块  Orientation="Horizontal" 水平显示  HorizontalAlignment="Center" 居中<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"><Border Width="28" Height="28" CornerRadius="10"><Border.Background><ImageBrush ImageSource="../Assets/Images/Logo.png" Stretch="UniformToFill" Viewport="-0.3,-0.3,1.6,1.6"Opacity="0.5"/></Border.Background><TextBlock Text="&#xe600;" FontFamily="{StaticResource FF}" VerticalAlignment="Center" HorizontalAlignment="Left"FontSize="20" Foreground="ForestGreen" Height="19" Width="18" Margin="-14,0,0,0"><TextBlock.Effect><DropShadowEffect BlurRadius="5" Color="ForestGreen" ShadowDepth="0" Opacity="0.5"/></TextBlock.Effect></TextBlock></Border><TextBlock Text="音娱乐行播放器" VerticalAlignment="Center" Margin="10,0,0,0" Foreground="Orange"FontSize="13" FontWeight="Bold"/></StackPanel>

**************

菜单栏目

 <StackPanel Grid.Row="1"><RadioButton Content="首页" Tag="&#xe715;" Style="{StaticResource MenuButtonStyle}" IsChecked="True"/><RadioButton Content="有声动态谱" Tag="&#xe715;" Style="{StaticResource MenuButtonStyle}" IsChecked="True"/><RadioButton Content="精品歌单" Tag="&#xe66a;" Style="{StaticResource MenuButtonStyle}"/><RadioButton Content="歌手推荐" Tag="&#xe895;" Style="{StaticResource MenuButtonStyle}"/><RadioButton Content="单曲排行" Tag="&#xe608;" Style="{StaticResource MenuButtonStyle}"/><Label Content="音乐分类" Tag="&#xe62f;" Style="{StaticResource MenuLabelStyle}"/><UniformGrid Columns="3" Margin="40,0,10,0"><RadioButton Content="流行" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="民谣" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="电子" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="舞曲" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="说唱" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="轻音乐" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="爵士" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="乡村" Style="{StaticResource ClassButtonStyle}"/><RadioButton Content="更多" Style="{StaticResource ClassButtonStyle}"/></UniformGrid><Label Content="我的音乐" Tag="&#xe645;" Style="{StaticResource MenuLabelStyle}"/><ItemsControl ItemsSource="{Binding SList}" Margin="40,0,10,0"><ItemsControl.ItemTemplate><DataTemplate><RadioButton Content="{Binding Header}" Tag="{Binding Icon}" Style="{StaticResource SheetButtonStyle}"/></DataTemplate></ItemsControl.ItemTemplate></ItemsControl></StackPanel>

样式控件

MenuButtonStyle 样式 
// <Border 没法放两个以上对象 需要<StackPanel  包起来  <TextBlock 图标 <ContentPresente 内容
// <ControlTemplate.Triggers> 控件触发器  <Style.Triggers>样式触发器<Style TargetType="RadioButton" x:Key="MenuButtonStyle"><Setter Property="Foreground" Value="#B1AFBA"/><Setter Property="GroupName" Value="A"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="RadioButton"><Border BorderBrush="Transparent" BorderThickness="2,0,0,0" Name="border" Height="30" Margin="0,3"><StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"><TextBlock Text="{TemplateBinding Tag}" FontFamily="{StaticResource FF}"FontSize="18"/><ContentPresenter VerticalAlignment="Center" Margin="10,0,0,0"/></StackPanel></Border><ControlTemplate.Triggers><Trigger Property="IsChecked" Value="True"><Setter TargetName="border" Property="BorderBrush" Value="#AA6063FB"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter><Style.Triggers><Trigger Property="IsChecked" Value="True"><Setter Property="Foreground" Value="#6063FB"/></Trigger></Style.Triggers></Style>
MenuLabelStyle 样式<Style TargetType="Label" x:Key="MenuLabelStyle"><Setter Property="Foreground" Value="#555"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Label"><Border BorderBrush="Transparent" BorderThickness="2,0,0,0" Name="border" Height="30" Margin="0,3"><StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"><TextBlock Text="{TemplateBinding Tag}" FontFamily="{StaticResource FF}"FontSize="18"/><ContentPresenter VerticalAlignment="Center" Margin="10,0,0,0"/></StackPanel></Border></ControlTemplate></Setter.Value></Setter></Style>ClassButtonStyle 样式<Style TargetType="RadioButton" x:Key="ClassButtonStyle"><Setter Property="Foreground" Value="#B1AFBA"/><Setter Property="FontSize" Value="11"/><Setter Property="GroupName" Value="A"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="RadioButton"><Border Height="24" Background="#EEE" Margin="1" CornerRadius="3"Name="border"><ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="border" Property="Background" Value="#116063FB"/></Trigger><Trigger Property="IsChecked" Value="True"><Setter TargetName="border" Property="BorderBrush" Value="#AA6063FB"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter><Style.Triggers><Trigger Property="IsChecked" Value="True"><Setter Property="Foreground" Value="#6063FB"/></Trigger></Style.Triggers></Style>

后台绑定数据

指定关系

 DataContext = new MainViewModel();

右侧内容

 <!--右侧内容--><Grid Grid.Column="1"><Grid.RowDefinitions><RowDefinition Height="50"/><RowDefinition/></Grid.RowDefinitions><TextBox Height="28" Width="180" HorizontalAlignment="Left"Style="{StaticResource SearchTextBoxStyle}"VerticalContentAlignment="Center" Margin="30,0"/><!--页面内容  VerticalScrollBarVisibility="Hidden" 隐藏滚动条--><ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Hidden"><Grid Margin="30,0"><p:FirstPage/>  fistpage 页面</Grid></ScrollViewer></Grid>

爬虫

数据绑定

 <TextBlock Text="热门专辑" VerticalAlignment="Center" FontWeight="Bold"Foreground="#555"/><ListBox Grid.Row="1" BorderThickness="0" Background="Transparent"ItemsSource="{Binding AlbumList}" ScrollViewer.HorizontalScrollBarVisibility="Hidden"><ListBox.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel Orientation="Horizontal"/>  水平显示</ItemsPanelTemplate></ListBox.ItemsPanel><ListBox.ItemContainerStyle>  模板<Style TargetType="ListBoxItem"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListBoxItem">  关键 控件模板<ContentPresenter Margin="5"/></ControlTemplate></Setter.Value></Setter></Style></ListBox.ItemContainerStyle><ListBox.ItemTemplate><DataTemplate>    数据模板<Grid>
<Grid.RowDefinitions><RowDefinition/><RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Border Width="100" Height="100" CornerRadius="5" ><Border.Background><ImageBrush ImageSource="{Binding Cover}"/></Border.Background><Border.Effect><DropShadowEffect BlurRadius="5" ShadowDepth="0" Color="Gray" Opacity="0.5"/></Border.Effect>
</Border>

数据列表绑定

数据细节处理

ps:学wpf没有个大屏是个阻力哈哈哈

播放控制器

 DataContext.PlayDownloadCommand,RelativeSource
播放命令指向信息<Style TargetType="ListBoxItem"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListBoxItem"><Grid Background="Transparent" Name="root"><ContentPresenter/><TextBlock Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center"Margin="100,0,0,0"FontSize="11" Name="tb_control" Visibility="Collapsed"><Hyperlink TextDecorations="None" Command="{Binding DataContext.PlayDownloadCommand,RelativeSource={RelativeSource AncestorType=Window}}"CommandParameter="{Binding}">播放</Hyperlink><Hyperlink TextDecorations="None">添加</Hyperlink></TextBlock></Grid><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="root" Property="Background" Value="#44ECEAF6"/><Setter TargetName="tb_control" Property="Visibility" Value="Visible"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>

指向信息帮助类 有点深入自己看

public class Command<T> : ICommand
{public event EventHandler? CanExecuteChanged;public bool CanExecute(object? parameter){return true;}public void Execute(object? parameter){dynamic param = parameter;DoExecute?.Invoke(param);}public Action<T> DoExecute { get; set; }public Command(Action<T> action){DoExecute = action;}
}public class Command : Command<object>
{public Command(Action action) : base(obj => action?.Invoke()) { }
}

其他类似

小经验

分界线 深吭来了

    public async void Play(SongModel song){var options = new LaunchOptions { Headless = true };// 这里有个深坑哈  先要跑一边 下载运行环境 后 注释掉 // await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);//注意 两个usingusing (var browser = await Puppeteer.LaunchAsync(options))using (var page = await browser.NewPageAsync()){await page.GoToAsync(song.Url);//请求之后 就是用语法  有就获取srcvar jsSelectAllAnchors = @"Array.from(document.querySellectorAll('audio')).map(a=>a.src);";var urls=await page.EvaluateExpressionAsync<string[]>(jsSelectAllAnchors);if (urls != null&&urls.Length>0){wc.DownloadFile(urls[0],"./songs/"+song.SongName+".mp3");   }}}

遇到的问题 jsSelectAllAnchors 这里面的命令哪里来的 写错了一个单词 找了有点久 

细节UI 播放控制台

双击

跑起来了 

简单的播放 可以下载播放 下载延迟很耗时间 

小编表示 wpf 界面代码写起来 这还是有点底子 ,写起来 比vue webfrom react 都麻烦=.=。。。。。

.net几行代码音乐API各排行榜 热搜 入库-CSDN博客

ABP.Next系列02 搭个API框架要多久 项目下载 运行 -Fstyle_【abp vnext】下载并运行web api项目详细教程文档-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:并查集

数据结构&#xff1a;并查集 题目描述参考代码 题目描述 输入样例 5 5 C 1 2 Q1 1 2 Q2 1 C 2 5 Q2 5输出样例 Yes 2 3参考代码 #include <iostream>using namespace std;const int N 100010;int n, m; int p[N], sz[N];int find(int x) // 返回x的祖宗节点 路径…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十六)- 微服务(6)

目录 10. Docker 10.1 Docker基本操作 10.1.1 镜像相关命令 10.1.2 容器相关命令 10.2 数据卷命令 10.2.1 常用命令 : 10.2.2 挂载数据卷 10. Docker 10.1 Docker基本操作 10.1.1 镜像相关命令 docker --help 查看docker帮助文档 docker images --help 查看docker ima…

Java中条件运算符的嵌套使用技巧总结

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

c语言项目-贪吃蛇项目2-游戏的设计与分析

文章目录 前言游戏的设计与分析地图&#xff1a;这里简述一下c语言的国际化特性相关的知识<locale.h> 本地化头文件类项setlocale函数 上面我们讲到需要打印★&#xff0c;●&#xff0c;□三个宽字符找到这三个字符打印的方式有两种&#xff1a; 控制台屏幕的长宽特性&a…

C++笔试强训day38

目录 1.天使果冻 2.dd爱旋转 3.小红取数 1.天使果冻 链接https://ac.nowcoder.com/acm/problem/219641 一开始都可以想到将数组的前x个数拿出来排降序输出第二个数即可。 但是因为询问量和数据量都较大&#xff0c;每次询问一次都要排序一次数组&#xff0c;会超时&#xf…

ai聊天机器人app的分享!有4个热门的软件!

在科技日新月异的今天&#xff0c;AI聊天机器人已经不再是遥不可及的科幻概念&#xff0c;而是实实在在走进了我们的日常生活。无论是工作中的信息查询&#xff0c;还是生活中的闲聊解闷&#xff0c;这些智能助手都能为我们提供便捷、高效的服务。那么&#xff0c;市面上都有哪…

含有嘧啶的光活性阳离子共轭微孔聚合物通过“吸附杀死”抗菌策略促进感染伤口愈合

引用信息&#xff1a; 文 章&#xff1a;Photoactive cationic conjugated microporous polymers containing pyrimidine with an adsorption-killantibacterial strategy for infected wound healing. 期 刊&#xff1a;Chemical Engineering Journal&#xff08;影响因子…

【MySQL】sql语句之库操作

序言 在上篇文章学习当中&#xff0c;我们认识了数据库的相关概念&#xff0c;以及MySQL的框架和基本使用等内容&#xff0c;总之对数据库有了一个大致的认识&#xff0c;那么本篇文章将开始关于sql语句的学习&#xff0c;本文主要是关于库的属性和操作的内容&#xff0c;简单可…

stm32下载驱动ST-LINK/V2驱动下载

http://www.openedv.com/docs/tool/dap/ST-LINKV2.html https://www.stmcu.com.cn/Designresource/detail/fi rmware_software/709492

电商风控指南:“仅退款”成部分商家梦魇,如何有效防控非法牟利

目录 “仅退款”成不法分子牟利新途径 各电商平台的“仅退款”条款模糊 商家如何防范“仅退款”的欺诈 “仅退款”服务已成为各大电商平台的“标配”。然而&#xff0c;以“薅羊毛”的方式谋取不当利益&#xff0c;给商家造成了经济和声誉上的双重损失&#xff0c;引发了广泛关…

CentOS-内网搭建FTP-Server

一、镜像选择 1、 Centos-everting或者DVD 2、7.5 7.6 7.9 均可 二、安装步骤 1、其余步骤和普通安装一致。 2、最重要的一步为“软件选择” 1、勾选FTP、文件以及存储服务器、性能以及开发工具。 三、FTPServer搭建 1、关闭防火墙 systemctl stop firewalld or 通过21和20…

机器视觉——找到物块中心点

首先先介绍一下我用的是HALCON中的HDevelop软件。 大家下载好软件后可以测试一下&#xff1a; 在程序编辑器窗口中输入下面指令&#xff1a; read_image(Image,monkey) 那么如果出现这样的图片&#xff0c;说明是没有问题的 那么本次编程采用的是下面这张图片 我们要达到的…

【论文复现|智能算法改进】基于改进麻雀算法的无线传感器网络覆盖优化研究

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 WSN数学模型 2.改进点 基于Sobol序列和ICMIC混沌映射的种群初始化 ICMIC是一种无线映射折叠次数的映射模型: { z n 1 sin ⁡ ( α π…

客户案例|Zilliz Cloud 助力点石科技转型 AI 智能服务商

福建点石科技网络科技有限公司成立于2010年&#xff0c;是国家高新技术企业&#xff0c;阿里云、蚂蚁金服等大厂海内外生态合作伙伴ISV。在餐饮、零售、酒店、旅游、商圈的行业定制化服务化上有深厚积累&#xff0c;在境内外做了大量标杆性软件项目&#xff0c;如东南亚RWS圣淘…

Python | 试卷刷题and基础笔记

1.下列转义字符中&#xff0c; 属于“回车”含义的是 \n 换行 \r 回车 2.for循环遍历字典 在Python中&#xff0c;你可以使用for循环来遍历字典的键&#xff08;keys&#xff09;、值&#xff08;values&#xff09;或者键-值对&#xff08;items&#xff09;。下面是三种遍历…

Postman接口测试笔记(超详细)

基于工具Poatman的接口自动化基础应用以及接口关联 一、什么是接口&#xff1f; 硬件接口&#xff1a;USB接口&#xff0c;投影仪接口&#xff0c;鼠标键盘接口 软件接口&#xff1a;称为API&#xff0c;主要使用于数据交互 软件接口分类&#xff1a; 内部接口&#xff1a…

树莓派5烧系统和ssh远程实现

1、硬件说明 树莓派5 64G micro SD卡读卡器 2、烧录系统过程记录 之前写过一篇pi4B烧录Ubuntu22.04的博客&#xff0c;这篇就简单记录备份下 2.1 去ubuntu官网在树莓派上安装Ubuntu | Ubuntu下载Ubuntu 桌面 24.04 LTS 我之前已经下好了就有个(1) 2.2 用读卡器把SD卡插到…

实战:一款唯美的个人主页-home2.0-2024.6.4(测试成功)

目录 文章目录 目录实验软件前提条件效果说明1、背景2、配置1、克隆代码库2、配置并构建镜像3、部署测试方案1&#xff1a;从docker容器拷贝生成的静态文件放到网站/目录方案2&#xff1a;启动容器&#xff0c;nginx里配置反向代理&#xff08;推荐&#xff09; 4、访问 3、总结…

全球首款AR电脑上线,可投影100英寸屏幕

近日&#xff0c;Sightful公司推出了一款名为Spacetop G1的革命性笔记本电脑&#xff0c;将AR技术与传统笔记本电脑巧妙融合&#xff0c;打造出令人惊叹的全新办公体验。 全球首款AR电脑上线&#xff0c;可投影100英寸屏幕 不同于传统笔记本电脑依赖物理屏幕显示内容&#xff0…

异常概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序运行过程中&#xff0c;经常会遇到各种各样的错误&#xff0c;这些错误统称为“异常”。这些异常有的是由于开发者将关键字敲错导致的&#xf…