- 博客(199)
- 资源 (15)
- 收藏
- 关注
原创 ASP.NET Core WebApi+React UI开发入门详解
在前段时间,有粉丝反馈能否写一篇基于ASP.NET Core Web Api+React UI进行Web开发的文章,经过查阅相关资料,发现Visual Studio 2022已经集成相关模板,可以在Visual Studio中直接创建项目项目,今天以一个小例子,简述ASP.NET Core Web Api+React UI开发系统的基本步骤,仅供学习分享使用,如有不足之处,还请指正。
2025-03-25 00:55:54
628
原创 Avalonia系列文章之样式与主题2
在前一篇文章中,简述了Avalonia UI中样式和主题的简单用法,今天继续深入讲解样式的选择器语法以及内置主题等相关内容,仅供学习分享使用,如有不足之处,还请指正。
2025-02-26 11:00:00
889
原创 Avalonia系列文章之样式与主题
Avalonia UI中的样式是一种可以在控件之间共享属性设置的机制。与WPF中的样式不同,Avalonia UI中的样式设置借鉴了B/S开发中的CSS样式理念;不过Avalonia UI引入了主题(ControlTheme)和WPF中的样式相对应。当给UI控件设置样式时,样式系统从控件开始沿着逻辑树向上搜索,直到应用程序的最高级别(App.axaml)。如果样式系统匹配到控件设置的样式时,则根据样式中的设置器互进行更改。
2025-02-20 12:00:00
1951
原创 Avalonia系列文章之布局简介
在UI设计中,页面布局非常重要,良好的布局不仅可以有效的利用空间,还能提升交互体验,以达到事半功倍的效果。所以对于Avalonia UI初学者来说,布局控件的了解与学习也非常的重要,今天以一些小例子,简述Avalonia UI框架中布局控件的使用,仅供学习分享使用,如有不足之处,还请指正。
2025-02-10 22:23:16
1081
原创 Avalonia系列文章之控件简介
在图形用户页面出现之前,程序的输入输出都是通过命令行进行,输入输出的数据都是最原始的方式。在图形用户页面出现以后,输入输出变得越来越友好,且丰富多样,不仅可以输出格式化表格,图表,以及图像等形式,还能接受用户的输入指令,而这些输入输出都是通过控件实现的。按钮(Button),按钮常用于在单击或触摸时触发操作。它们可以包含文本、图标或两者,并经常用于提交表单、打开对话框或执行命令等任务。文本框(TextBox),文本框允许用户输入和编辑文本。它们用于捕获用户输入,例如用户名、密码或任何形式的文本信息。
2025-02-06 14:15:49
1013
原创 Avalonia系列文章之再试牛刀
通过前一篇文章,已经了解了AvaloniaUI的环境安装以及项目创建,磨刀不误砍柴工,今天继续进行Avalonia基础知识学习,如有不足之处,还请指正。
2025-01-25 12:00:00
946
原创 Avalonia系列文章之小试牛刀
Avalonia是一款开源的跨平台UI框架,它是.NET基金会的一部分,专为创建灵活且美观的用户界面而设计。Avalonia支持多种应用程序开发平台,包括Windows、Linux、macOS、iOS、Android和WebAssembly。同时Avalonia基于现代.NET技术栈,后台允许采用C#或其他.NET语言编写代码,UI页面采用XAML语言,同样兼容WPF的样式系统,布局系统和绑定基础设施模型,之前学习WPF的同学可以无缝衔接,几乎是零成本学习。
2025-01-18 00:51:19
825
原创 WinForm之MDI窗体开发详解
在WinForm开发中,如果有多个页面进行展示,通常采用菜单栏+容器布局方式(点击菜单栏,打开新的页面,并在容器中显示)。今天以一个简单的小例子,简述如何通过菜单栏和MDI容器实现页面的布局,仅供学习分享使用,如有不足之处,还请指正。
2025-01-07 23:06:59
1004
原创 进程间通信组件ZeroMQ详解
在一些复杂的项目中,往往会由不同功能的程序组成,且在程序运行期间,各个程序还需要进行互相通信,实现进程间通信的方式有很多种,最常用的就是通过消息中间件,比如RabbitMQ,Kafka,以及ZeroMQ等,而RabbitMQ和Kafka这两款中间件往往都需要独立安装步骤才能使用,ZeroMQ却不需要独立安装部署,而是作为动态库直接在程序中引用即可。今天以一个简单的小例子,简述ZeroMQ的常见用法,仅供学习分享使用,如有不足之处,还请指正。
2024-12-30 12:00:00
1429
原创 WPF开发框架Caliburn.Micro详解
MVVM 代表 Model、View、View Model。基本思想是创建一个三层用户界面。它的主要用途是将 UI 的可视部分(表单、按钮和其他控件)尽可能与处理 UI 命令的逻辑分开。对于 WPF 应用程序,视图由 XAML 代码和代码隐藏表示,这实质上是用 C# 编写 XAML 代码的方法。此层不应执行任何处理。View Model 是功能性 UI 层,它接受来自 UI 的命令并处理这些命令。第三层是 Model,它保存数据模型。
2024-12-16 12:00:00
1152
原创 在WPF程序中实现PropertyGrid功能
SelectedObject,设置PropertyGrid控件选择的对象,赋值后,控件将显示对象所有public修饰的属性。SelectedObjects,设置PropertyGrid控件显示的对象列表,为数组类型。赋值后,将显示所有对象公共的public修饰的属性。BackColor 更改其背景色。HelpBackColor 更改助窗口背景色。HelpForeColor 更改助窗口字体颜色。HelpVisible 显示隐藏帮助窗口。ToolbarVisible 显示隐藏工具栏。
2024-11-23 01:02:15
1418
原创 基于WPF开发视频播放器
在实际应用中,视频播放功能在很多软件中都会用到,将音频和视频集成到应用程序中不仅可以增强用户体验,还能起到事半功倍的效果。今天本文以一个简单的小例子,简述如何通过WPF中的MediaElement开发视频播放器,仅供学习分享使用,如有不足之处,还请指正!
2024-11-18 12:00:00
1357
原创 不可不知的WPF动画(Animation)
动画是快速循环播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉。当图像播放速度超过了人眼识别的速度,就会感觉这些图像形成了一个连贯的变化的场景。在电影中,摄像机每秒钟拍摄许多照片(每一张成为一帧),便可给人造成这种错觉。不同的帧速率会影响视频的流畅度和清晰度。24帧/秒:这是电影行业标准的帧速率,尤其在拍摄无声电影时期,24帧/秒被广泛采用以节省胶片。尽管如此,24帧/秒在今天仍然被一些艺术家和独立电影制作人使用,以追求特定的视觉效果。25帧/秒。
2024-09-21 16:30:49
1554
原创 不可不知的WPF转换(Transform)
转换(Transform)定义如何将控件从一个坐标空间映射或转换到另一个坐标空间。2D转换可以通过Matrix来实现,Matrix是一个3行3列的double值的集合。不过WPF还提供了多个Transform类,以便在不知道基础矩阵结构配置的情况下转换对象。RotateTransform,按指定的角度(Angle)旋转元素。ScaleTansform,按指定的坐标方向(ScaleX和ScaleY)缩放元素。SkewTransform,按指定的角度(AngleX和AngleY)倾斜元素。
2024-09-14 22:39:25
1158
原创 不可不知的WPF几何图形(Geometry)
几何图形可以随意和进行缩放而不变形,这是和位图最大的差异。Geometry类及其派生类(PathGeometry,EllipseGeometry,CombinedGeometry)可以用于描述2D形状的几何图形。Geometry对象可以是矩形和椭圆形等简单图形,也可以是由两个或者多个几何对象创建的复合图形,如:PathGeometry和StreamGeometry等,可以用于绘制曲线或其他复杂图形。
2024-09-08 11:17:19
1591
原创 不可不知的WPF形状(Shape)
在WPF开发中经常需要进行绘制图形,可以利用Shape类型绘制基本的形状,而且Shape派生自FrameworkElement,属于UI元素范畴,可以直接利用XAML进行绘制。本文通过一些简单的小例子,简述如何通过Shape类绘制形状,仅供学习分享使用,如有不足之处,还请指正。Shape类位于System.Windows.Shapes命名空间,而上篇文章介绍的Brush位于System.Windows.Media命令空间,由此可见两者所属的分类不同。
2024-09-04 00:30:06
1091
原创 不可不知的WPF画笔(Brush)
在WPF中,屏幕上的所有内容,都是通过画笔(Brush)画上去的。SolidColorBrush使用纯Color绘制区域,有多种方法可以制定纯色画笔的颜色,如使用A(Alpha)R(红色)G(绿色)B(蓝色)颜色通道来定义颜色,或者使用系统预定义颜色。或者通过Color属性进行赋值。Opacity,表示画笔的透明度, Opacity 的值为 0 表示完全透明,1 表示完全不透明,0.25表示25%的透明。以上就是《不可不知的WPF画笔(Brush)》的全部内容,希望可以抛砖引玉,一起学习,共同进步!
2024-08-28 23:20:43
1289
原创 .NET辅助角色服务入门简介
处理 CPU 密集型数据,比如文件检索或图片识别等。在后台对工作项进行排队,比如:批量发送短信或邮件等操作。按计划执行基于时间的操作,比如:间隔2秒执行一次某操作。后台服务处理通常不涉及用户界面 (UI),但可以围绕它们来构建 UI。在早期使用 .NET Framework 时,Windows 开发人员可能出于这些目的创建 Windows 服务。现在通过 .NET,你可以使用 BackgroundService(它是 IHostedService 的实现)或实现自己的服务。
2024-08-15 17:09:47
972
原创 推荐一款将控制台程序部署到Windows服务的组件
Topshelf是一款开源的用于托管.NET编写的应用程序到Windows服务的框架,通过Topshelf,可以非常方便的将普通控制台应用程序,转换成Winodw服务,并注册到Windows服务控制管理器(SCM)中。
2024-07-23 20:10:04
993
原创 推荐一种批量判断文件是否存在的快速办法
在日常开发中,我们经常需要和文件打交道,特别是桌面开发,有时候就会需要加载大批量的文件,而且可能还会存在部分文件缺失的情况,那么如何才能快速的判断文件是否存在呢?如果处理不当,且文件数量比较多的时候,可能会造成卡顿等情况,进而影响程序的使用体验。今天就以一个简单的小例子,简述两种不同的判断文件是否存在的方式以及效率比较。
2024-07-18 22:08:55
1076
原创 腾讯又一平台即将停止运营
平台中的内容,有收费课程,也有免费课程;“天下无不散之筵席”,在我们的人生旅途中,会有很多经历,“腾讯课堂”就像是一个陪伴我们十年的老朋友,走向了不同的岔路口,同时也希望腾讯能越来越优秀,多推出一些像“腾讯课堂”一样非常好的平台,少一些Game王者之类的平台。随着腾讯公司业务和战略的调整,某些业务逐渐退出历史舞台,如“腾讯直播平台NOW”,以及“QQ签到”,“腾讯待办”,“企鹅FM音频平台”等,最近又有一则重磅消息,那就是“腾讯课堂”也即将停止运营。学习编程,从关注【老码识途】开始,为大家分享更多文章!
2024-07-09 23:50:47
565
原创 推荐一款Win11主题WPF UI框架
通过WPF Gallery,可以参考官方示例,提升自己的编程能力,同样有助于WPF开发者们开发出更符合现在设计风格、更美观的界面。最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的Fluent Design UI设计,为用户带来全新的视觉体验。在微软商店有很多免费的应用程序可供安装,且内容丰富多样,不仅包含常用软件,还有开发工具,类库等内容,应有尽有。操作系统,需要升级到Win11才可以。
2024-07-04 11:53:21
1261
原创 C# 通过Win32API设置客户端系统时间
在日常工作中,有时可能会需要获取或修改客户端电脑的系统时间,比如软件设置了Licence有效期,预计2024-06-01 00:00:00到期,如果客户手动修改了客户端电脑时间,往前调整了一年,则软件就可以继续使用一年,如此循环往复,则Licence将形同虚设。所以有时候需要校验客户端电脑时间和服务器端时间,是否一致,如果不一致,则需要修改客户端电脑时间或进行系统提示。本文以一个简单的小例子,简述如何通过C#获取和设置客户端电脑的系统时间,仅供学习分享使用,如有不足之处,还请指正。
2024-06-17 21:34:34
869
原创 基于WPF开发动态可交互混淆矩阵
最近在项目中,为了算法结果的可视化,需要用到混淆矩阵(Confusion Matrix),而网上资源大多是基于Python绘制的混淆矩阵,并且是输出图片格式,并不能响应用户点击,今天以一个简单的小例子,简述如何通过WPF绘制混淆矩阵,并可响应用户点击事件,仅供学习分享使用,如有不足之处,还请指正。在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. 这个矩阵的每一行表
2024-06-03 23:34:38
869
原创 .NET数据交互之生成和读取YAML文件
最近在项目中,业务上需要与Python进行交互,而Python程序用的配置文件主要是YAML,程序以命令行形式运行,前端页面由C#通过WPF开发完成。现在需要通过C#生成YAML配置文件,并经过Python读取和修改后,再次由C#进行读取。在C#开发程序中,主要用的配置文件主要是XML,JSON,INI等,很少用到YAML,今天以一个简单的小例子,简述如何通过C#程序,进行YAML文件的读取和写入,仅供学习和参考使用,如有不足之前,还请指正。
2024-05-31 22:08:48
1512
2
原创 基于WPF+Sqlite开发抽奖软件【内附源码】
在很早之前,就想过开发一款抽奖软件,却一直没有实际去做,最近经过一段时间的准备,终于开发出了一款基于WPF+Sqlite版的抽奖软件,包括客户端和管理端。本项目主要是为了熟悉WPF开发流程,仅供学习分享使用,如有不足之处,还请指正。根据抽奖软件的功能进行拆解,主要包括:Gift(礼品表),Lucky(奖品表),User(抽奖用户表),Winner(中奖表),各个表详细创建语句如下所示:Winner(中奖表),主要包括中奖用户ID,奖品ID,中奖时间等。
2024-05-22 17:38:13
838
1
原创 上班最大的意义,不是那点工资
后来,因为工作需要,外派到了海外分厂进行长达半年的技术支持,在此期间,结识了新的朋友,新的同事,同时也提升了工作能力,回来以后,还给涨了点工资。工作方式也和之前有了很大的区别,进车间要穿无尘服,口罩,手套,鞋子,将全身包裹的只剩下眼睛,及天车,自动化车间等,这种之前只在电视里面见过的情节,也成了日常工作内容之一。自身角色,以及对社会的认知,也发生了转变。,而是工作能让你有规律的生活,有见人的机会,有稳定的社交圈子,还有来自客户,同事,或者或少的压力,一可以锻炼心智,二能促进你不断前进,不至于越来越堕落”。
2024-04-17 10:24:48
645
原创 聊聊大家眼中的.NET现状与未来
NET类库在不同应用和应用类型中共享功能,无论构建哪种类型的应用,代码和项目文件看起来都一样,可以访问每个应用的相同运行时、API和语言功能。.NET Core:是微软新推出的一种开源和具备跨平台能力的应用程序开发架构(Application Framework),支持在linux、windows、mac操作系统平台去构建应用程序,.Net core支持UWP和ASP.NET Core,ASP.NET Core是用于构建web应用程序,而UWP是用于windows pc和移动应用程序;
2024-04-13 23:53:59
1398
原创 WPF系列文章合集(低调奢华版)
自2021年9月21号开通公众号以来,历时2年半的时间,一共写了3个系列文章,《ASP.NET Core MVC从入门到精通系列文章》,《.Net Core开发五大案例》,《浅谈WPF开发系列文章》,以及其他零零散散的知识点,共139篇。自上一个系列文章写完之后,最近的两三个月时间,一直在写WPF相关技术文章,断断续续地写了近二十几篇文章,为了方便大家阅读,现将本系列文章分类整理,汇总如下。另外,马上就要放假了,准备回家陪陪小孩子,暂时先不更新文章了,节后再更,顺便趁此时间,整理一下思路,短暂休整一下。
2024-04-08 10:35:33
836
原创 浅谈WPF之路由事件
随后,路由事件将朝着路由事件的源节点元素(即引发路由事件的元素)方向,沿路由线路传播到后续的子元素。合成控件的过程中通常会使用或处理隧道路由事件,通过这种方式,可以有意地禁止复合部件中的事件,或者将其替换为特定于整个控件的事件。路由事件随后会路由到后续的父级元素,直到到达元素树的根。路由事件与直接事件的区别在于,直接事件激发时,发送者直接将消息通过事件订阅者交给事件响应者,事件响应者对事件的发生做出响应。随后,路由事件将朝着路由事件的源节点元素(即引发路由事件的元素)方向,沿路由线路传播到后续的子元素。
2024-03-31 09:34:27
1459
原创 浅谈WPF之属性系统
在WPF开发中,经常听到各种属性,如:依赖属性,附加属性,CLR属性,那这些不同类型的属性,具体又有什么作用呢?今天以一些简单的小例子,简述一下WPF开发中,各种属性的相关概念和应用,仅供学习分享使用,如有不足之处,还请指正。注意:在此示例中,Name的值,可通过公共字段进行赋值,也可通过SetName方法赋值,但是我们无法要求调用对象强制采用哪一种,,因为看起来两种都可以。在上述示例中,将依赖属性Age绑定到Slider,通过Slider控件的滑动,数值改变,触发Age属性的回调函数。
2024-03-29 08:00:00
887
原创 浅谈WPF之MVVM工具包
点击项目右键,选择“管理NuGet程序包”,打开NuGet管理窗口,然后搜索“CommunityToolkit.Mvvm”,进行安装即可,目前最新版本为8.2.2。在之前的WPF示例中,都会用到一个MVVM框,也是一个比较常的MVVM框架,就是MVVM工具包【CommunityToolkit.Mvvm】,今天专门以一个简单的小例子,简述一下MVVM工具包的常见用法,仅供学习分享使用,如有不足之处,还请指正。在本实例中,只是简单介绍了MVVM工具包的使用,如若想具体了解更详细内容,可参考官方文档,
2024-03-25 08:00:00
2124
原创 详解C#之WinForm版利用RichTextBox 制作文本编辑器【附源码】
Windows窗体中的RichTextBox控件用于显示,输入和操作格式化的文本,RichTextBox除了拥有TextBox控件的所有功能外,还可以显示字体,颜色,链接,从文件中读取和加载图像,以及查找指定的字符。在Windows应用程序开发中,刚刚介绍了WPF版的利用RichTextBox实现文本编辑器,今天继续推出WinForm版的利用RichTextBox实现文本编辑器。以上就是【详解C#之WinForm版利用RichTextBox 制作文本编辑器】的全部内容,关于更多详细内容,可参考官方文档。
2024-03-05 23:00:19
3451
原创 浅谈WPF之Binding数据校验和类型转换
在WPF开发中,Binding实现了数据在Source和Target之间的传递和流通,就像现实生活中的一条条道路,建立起了城镇与城镇之间的衔接,而数据校验和类型转换,就像高速公路之间的收费站和安检站。那在WPF开发中,如何实现数据的校验和类型转换呢?在数据绑定时,如果Source端的数据类型和Target端的数据类型不一致时,就需要用到数据类型转换,如:true/false与显示/隐藏之间的转换等,要实现数据转换,需要用到Binding的Converter属性。,仅供学习分享使用,如有不足之处,还请指正。
2024-03-04 21:15:37
1147
原创 浅谈WPF之DataGrid动态生成列
在日常开发中,DataGrid作为二维表格,非常适合数据的展示和统计。通常情况下,一般都有固定的格式和确定的数据列展示,但是在某些特殊情况下,也可能会需要用到动态生成列。本文以一些简单的小例子,简述在WPF开发中,如何动态生成DataGrid的行和列,仅供学习分享使用,如有不足之处,还请指正。
2024-02-22 23:40:47
2245
原创 浅谈WPF之利用RichTextBox实现富文本编辑器
在实际应用中,富文本随处可见,如留言板,聊天软件,文档编辑,特定格式内容等,在WPF开发中,如何实现富文本编辑呢?本文以一个简单的小例子,简述如何通过RichTextBox实现富文本编辑功能,主要实现复制,剪切,粘贴,撤销,重做,保存,打开,文本加粗,斜体,下划线,删除线,左对齐,居中对齐,右对齐,两端对齐,缩进,减少缩进,项目符号,数字符号,上标,下标,背景色,前景色,图片,打印等功能,仅供学习分享使用,如有不足之处,还请指正。
2024-02-19 08:00:00
2594
原创 浅谈WPF之UniformGrid和ItemsControl
在日常开发中,有些布局非常具有规律性,比如相同的列宽,行高,均匀的排列等,为了简化开发,WPF提供了UniformGrid布局和ItemsControl容器,本文以一个简单的小例子,简述,如何在WPF开发中应用UniformGrid和ItemsControl实现均匀的布局,仅供学习分享使用,如有不足之处,还请指正。
2024-01-31 01:20:14
2838
原创 浅谈WPF之样式与资源
WPF通过样式,不仅可以方便的设置控件元素的展示方式,给用户呈现多样化的体验,还简化配置,避免重复设置元素的属性,以达到节约成本,提高工作效率的目的,样式也是资源的一种表现形式。两个按钮使用同一个资源【背景图片】,只是一个采用静态资源引用,一个采用动态资源引用,当资源发生改变时,一个不改变,一个实时变化。WPF不仅支持传统的程序级的资源,还有独具特色的对象级资源,每一个界面元素,都可以拥有自己的资源,并被子元素共享。当鼠标进入时,字体变大,当鼠标离开时,字体恢复,如下所示:。
2024-01-27 00:08:34
1589
原创 浅谈WPF之UI布局
如果Canvas是窗口主元素(即最外层的布局面板是Canvas),用户改变窗口大小时,Canvas也会随之变化,子元素的位置也会随之移动,以保证相对于Canvas的位置属性不变。如果包含的元素超过了面板空间,它只会截断多出的内容。Width,Height,MinWidth,MinHeight,MaxWidth,MaxHeight:分别用来设置StackPanel的宽,高,最小宽,最小高,最大宽,最大高。Canvas通过设置Left,Top,Bottom,Right等属性的值,来设置子元素的位置。
2024-01-24 22:50:46
2097
原创 浅谈WPF之Popup弹出层
默认情况下,当IsOpen属性为true时,将一直处于打开状态,直到属性变为false。在日常开发中,当点击某控件时,经常看到一些弹出框,停靠在某些页面元素的附近,但这些又不是真正的窗口,而是页面的一部分,那这种功能是如何实现的呢?Popup(弹出层),Popup 控件提供一种在单独窗口中显示内容的方法,该窗口相对于指定元素或屏幕坐标在当前应用程序窗口上浮动。当ToggleButton取消选中时,隐藏弹出层。Popup控件,默认支持淡入,滑入等动画效果,,仅供学习分享使用,如有不足之处,还请指正。
2024-01-10 17:23:10
4937
基于WPF开发的视频播放器
2024-11-17
基于WPF+Sqlite开发抽奖软件
2024-05-22
C#+WinForm+FluentFTP实现文件上传下载功能实例
2024-04-29
WPF之绑定数据校验和类型转换实例
2024-03-04
WinForm+RichTextBox实现文本编辑器
2024-02-28
WPF之DataGrid动态生成列实例
2024-02-22
WPF+RichTextBox实现富文本编辑器
2024-02-18
.Net Core开发五大案例详解PDF
2024-01-04
WPF+DataGrid仿Excel筛选功能实例
2023-12-06
C#软件Licence应用实例
2023-09-03
ASP.NET Core MVC + SQL Server + 商城系统
2023-08-27
Html利用Canvas绘制图形
2023-07-16
ASP.NET Core MVC从入门到精通系列文章PDF版
2023-06-30
ASP.NET Core Web API之Token验证
2023-06-26
.Net+WPF绘制地铁路线图
2023-06-01
ASP.NET Core MVC + SQL Server 2012 + Element UI 校园图书管理系统
2023-02-07
WPF+ASP.NET SignalR实现在线聊天和后台通知功能
2022-09-14
VUE3.0+Antdv+Asp.net webapi学生信息管理系统
2022-08-30
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】
2022-06-05
ASP.NET Core开发学生信息管理系统
2022-01-22
Abp框架示例【ASP.NET Boilerplate Project】
2022-01-03
PythonChart.rar
2021-08-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人