WPF的Button,能否添加图标?

lwvsnks 2012-03-07 10:59:53
就是既有图标又有文字的按钮,如何做到?
如果Button不行,还有别的按钮控件行吗?
...全文
1102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
stella_lau 2012-04-17
  • 打赏
  • 举报
回复
可以分享下吗 我正在学习这一块
[Quote=引用 9 楼 的回复:]

引用 6 楼 lwvsnks 的回复:
这样太麻烦了吧?


引用 5 楼 kongxh_1981 的回复:

比较好的方法是写个继承于Button的ImageButton类,这个类有一个图片路径的依赖属性,然后为ImageButton写个模板,用来定义将图片显示在按钮中。这种做法的好处就是,复用性高。
我的QQ:33755383,我这里有源码,可以给你参考下。


一点都补……
[/Quote]
白色的海 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lwvsnks 的回复:]
这样太麻烦了吧?


引用 5 楼 kongxh_1981 的回复:

比较好的方法是写个继承于Button的ImageButton类,这个类有一个图片路径的依赖属性,然后为ImageButton写个模板,用来定义将图片显示在按钮中。这种做法的好处就是,复用性高。
我的QQ:33755383,我这里有源码,可以给你参考下。
[/Quote]

一点都补麻烦,只有一点点的代码量,而且这种模板写完,你调用的地方就一行代码就搞定了。
写模板是王道,也能帮助我们理解wpf的精髓,光是在表面上动脑筋是无法深入wpf编码地。
我这里源码是现成的,发给你参考一下也行。
放心好了,我不会把病毒给的。^-^
白色的海 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 simonezhlx 的回复:]
重定义一个控件模板(control template)就可以了,内部可以随心所欲。
http://blog.csdn.net/cs_victor/article/details/5625561
[/Quote]

模板肯定是王道,但是单单用模板作有图标的按钮还不是很够的,特别像是ribbon系列的按钮,
如果光用模板,我没找到好办法。
simonezhlx 2012-03-07
  • 打赏
  • 举报
回复
重定义一个控件模板(control template)就可以了,内部可以随心所欲。
http://blog.csdn.net/cs_victor/article/details/5625561
lwvsnks 2012-03-07
  • 打赏
  • 举报
回复
这样太麻烦了吧?

[Quote=引用 5 楼 kongxh_1981 的回复:]

比较好的方法是写个继承于Button的ImageButton类,这个类有一个图片路径的依赖属性,然后为ImageButton写个模板,用来定义将图片显示在按钮中。这种做法的好处就是,复用性高。
我的QQ:33755383,我这里有源码,可以给你参考下。
[/Quote]
白色的海 2012-03-07
  • 打赏
  • 举报
回复
比较好的方法是写个继承于Button的ImageButton类,这个类有一个图片路径的依赖属性,然后为ImageButton写个模板,用来定义将图片显示在按钮中。这种做法的好处就是,复用性高。
我的QQ:33755383,我这里有源码,可以给你参考下。
lwvsnks 2012-03-07
  • 打赏
  • 举报
回复
请问,你的那个image.png,放在什么目录下呢?

[Quote=引用 2 楼 net_lover 的回复:]

<Button>
<DockPanel>
<Image Source="image.png"/>
<Text DockPanel.Dock="fill" VerticalAlignment="center"> Button
<Italic>with Image!</Italic>
</Text>
</DockPanel>
</……
[/Quote]
lwvsnks 2012-03-07
  • 打赏
  • 举报
回复
我希望不是背景图片,而是像菜单栏那样,图标在左,文字在右,不知能否做到?又或者其它控件是否能够实现?

[Quote=引用 1 楼 net_lover 的回复:]

可以加背景图的啊
[/Quote]
孟子E章 2012-03-07
  • 打赏
  • 举报
回复
<Button>
<DockPanel>
<Image Source="image.png"/>
<Text DockPanel.Dock="fill" VerticalAlignment="center"> Button
<Italic>with Image!</Italic>
</Text>
</DockPanel>
</Button>

<Button>
<stackpanel>
Orientation="Vertical">
<Image
Height="32"
Margin="4,4,4,4"
Source="Icons/MyButton.ico" />
<textblock>
Text="MyText"
Margin="4,4,4,4"
VerticalAlignment="Center" />
</textblock></stackpanel>
</Button>
孟子E章 2012-03-07
  • 打赏
  • 举报
回复
可以加背景图的啊
本书所附光盘范例 第4章(\C04) 示例描述:本章介绍LINQ的基本语法和使用。 UseQueryExpression 演示LINQ表达式语法的使用。 UseMethodSynax 演示LINQ方法语法的使用。 第5章(\C05) 示例描述:本章介绍LINQ to ADO.NET相关技术和使用。 QueryOneTable 演示用LINQ查询单个DataTable的数据。 QueryMultiTable 演示用LINQ查询多个DataTable的数据。 UseCopyToTable 演示通过LINQ查询在DataTable之间拷贝数据。 UseORDesigner 演示对象关系设计器(OR Designer)的使用。 UseDataContextLINQ 演示通过DataContext进行数据绑定和访问。 UseDataView 演示通过LINQ实现DataView的数据查询和绑定。 第6章(\C06) 示例描述:本章介绍LINQ to XML相关技术和使用。 CreateSimpleXMLTree 演示通过XElement创建简单的XML树。 CreateAttributeElement 演示通过XElement创建具有属性的XML元素。 CreateSubElement 演示通过XElement创建具有子元素的XML元素。 CreateXMLTree 演示通过XElement创建复杂的完整的XML树。 QeuryAttributesElement 演示通过XElement查询XML元素的属性。 QueryInContent 演示通过XElement查询XML元素的具体内容。 QueryOrderElement 演示通过XElement对XML元素进行排序。 QuerySubElement 演示通过XElement查询XML元素的子元素。 LoadXMLTree 演示通过XElement加载XML树。 第7章(\C07) 示例描述:本章介绍了WPF的基本概念和架构,并举了一个简单的示例演示WPF程序的开发。 HelloWPF 第一个用WPF示例应用程序。 第8章(\C08) 示例描述:本章介绍了XAML的语法,包括原理、使用方法以及事件处理等等。 AttachedProperty 使用XAML中的附加属性。 CodebehindDemo 使用XAML中的后置代码文件编写程序代码。 LooseXaml 松散XAML示例。 NamespaceDemo1 在XAML中使用系统命名空间。 OtherNamespace 在XAML中使用其他项目中的命名空间。 PropertyandTypeConvert 使用属性和类型转换器 PropertyElementSyntax 使用XAML的属性元素语法。 UnderstandXAMLDemo1 理解XAML的简单示例。 UnderstandXAMLDemo2 使用程序代码创建UI元素。 XAMLEvents 在XAML中使用事件。 XamlReaderDemo 动态加载和编译XAML示例。 第9章(\C09) 示例描述:本章详细介绍WPF中的全局应用程序类Application。 AccessingCurrentApplication 访问当前的全局应用程序类实例。 ApplicationEventDemo 应用程序类事件演示。 CreateApplicationByHand 手动创建应用程序类实例。 HandleCommandLineDemo 处理命令行参数。 SingleInstanceApplication 单实例应用程序。 SingleInstanceWithCommunication 在单实例应用程序实例之间通信。 VS2008Application 在VS2008中创建自定义的Application类。 第10章(\C10) 示例描述:本章学习WPF提供的布局特性。 CanvasDemo 使用Canvas进行布局。 DockPanelDemo 使用DockPanel进行布局。 GridDemo 使用Grid进行布局。 InkCanvasDemo 使用InkCanvas的示例。 SimpleDiagDox 简单对话框示例程序。 SimpleStackPanelDemo 使用StackPanel进行布局。 WrapPanelDemo 使用WrapPanelDemo进行布局。 第11章(\C11) 示例描述:本章学习WPF中的内容控件的概念以及特性。 BorderDemo 使用Border控件。 ContentDemo Content属性的使用示例。 ControlControlDemo 内容控件层次结构。 HeaderedContentControlDemo HeaderedContentControl使用示例。 ScrollViewer 使用ScrollViewer控件。 ViewboxDemo 使用Viewbox控件。 第12章(\C12) 示例描述:本章介绍WPF中的依赖属性和事件路由特性。 AttachedEvents 使用WPF的附加事件。 CaptureMouseDemo 捕捉鼠标示例。 CreateWPFDependencyProperty 创建WF中的依赖属性。 CustomRoutedEvent 自定义路由事件。 DragandDropLabel 拖动编程示例。 DragandDropSimpleDemo 文件拖放示例。 GetFocus 获取控件焦点。 KeyInputDemo 处理键盘事件示例。 LatBox 依赖属性示例。 LogicalTree 逻辑树示例。 MouseClickEventArgsDemo 鼠标单击事件示例。 MouseInputInfo 获取鼠标输入信息。 ProgramLoopTree 编程遍历逻辑树和视觉树。 RegisterAttached 注册附加属性。 RoutingStrategyDemo 演示如何使用路由策略。 SharedDP 共享依赖属性示例。 StackPanelLoadedDemo WPF中元素的生命周期事件演示。 UnderstandingDP 理解依赖属性。 UnderstandRoutedEvent 理解路由事件。 第13章(\C13) 示例描述:本章学习使用WPF的标准控件。 AnimationPopup 动画Popup弹出窗口。 BackgroundLinearGradientBrushDemo 使用渐变画刷填充背景示例。 BindingSliderDemo 使用Silder滑动条控件。 ButtonBaseDemo 使用Button控件的ButtonBase基类。 ChangeCursorDemo 更改鼠标光标示例。 CursorSimpleDemo 使用鼠标光标的简单示例。 FontFamilyDemo 字体使用示例。 LabelDemo 使用Label标签控件。 ListBoxDemo 使用ListBox控件。 MultiLineTextBox 多行文本框控件的演示。 MultiSelectedListBox ListBox中的多选示例。 OpacityDemo Opacity属性的使用方法。 PasswordBoxDemo 使用PasswordBox示例。 Popup Popup控件使用示例。 ProgressBarDemo ProgressBar控件使用示例 RadioButtonCheckBox RadioButton使用示例。 RepeatToggleButton RepeatToggleButton使用示例。 SimpleComboBox示例 使用ComboBox的简单示例。 SliderDemo Slider控件使用示例 TextBlockDemo TextBlock控件使用示例 ToolTip ToolTip控件使用示例 第14章(\C14) 示例描述:本章学习WPF的窗口和导航窗口的使用方法。 AddAndRemoveEntry 添加和移除导航记录的功能。 CommonDialogDemo WPF中的通用对话框示例。 DialogModalDemo WPF中的模式窗口示例。 DrawShapeWindow 绘制图形窗口示例。 FirstNavigateApp 第一个导航窗口应用程序示例。 FrameInPage 在导航窗口中使用Frame示例。 FrameNavigationDemo 框架导航示例程序。 Hyperlinkdemo 在导航窗口中使用超级链接。 MessageBoxDemo 消息框使用示例。 NavigationEventDemo 理解和使用导航事件。 NavigationServiceDemo 导航服务示例。 NavigationWindowDemo 使用WPF中的导航窗口进行导航。 PageFunctionDemo 使用PageFunction功能返回数据示例。 SaveandRestoreWindowState 保存和恢复窗口状态示例。 SharpedWindow 图形窗口示例 ShowingaWindow 显示窗口。 WindowDemo 简单窗口示例 WindowIcon 获取和设置Window图标示例。 WindowLifetime 窗口的生命周期事件。 XBAPDemo1 XBAP应用程序示例。 第15章(\C15) 示例描述:本章学习WPF资源、样式和控件模板。 AssemblyResourceDemo1 使用程序集资源。 BaseOnStyle 样式的继承使用示例。 DataTriggerDemo 数据触发器使用示例。 EventSetterDemo 绑定事件处理器示例。 EventTriggerDemo 事件触发器使用示例。 FontSizeResourceDemo 使用WPF资源示例。 MultiDataTriggerDemo 多个数据触发器的使用示例。 MultiTriggerDemo 多事件触发器示例。 SimpleButtonTemplate 简单的按钮模板示例。 StyleOrResourceDemo 样式或资源使用示例。 SystemResourceDemo 系统资源使用示例。 TargetTypeStyleDemo 为样式指定TargetType示例。 TemplateTriggerDemo 模板触发器示例。 TriggerDemo 触发器示例。 WindowResourceDemo 窗口资源使用示例 第16章(\C16) 示例描述:本章演示如何使用WPF的形状、变换和画刷来绘制图形。 BitmapEffectsDemo 位图效果使用示例。 DashLine 虚线绘制示例。 ImageBrushDemo1 图像画刷使用示例。 LineCapDemo WPF线帽示例。 LineDem 绘制直线。 LineGradientBrushDemo1 线性渐变画刷使用示例。 OpacityMaskDemo 透明遮罩使用示例。 RadialGradientBrushDemo 径向渐变示例。 RectangleDemo 矩形绘制示例。 ReflectionEffectDemo 反射效果示例。 SizePlacementDemo 图像位置示例。 TileModeDemo TileMode枚举示例。 TransformDemo 变换使用示例。 VisualBrushDemo1 可视化画刷示例。 第17章(\C17) 示例描述:本章演示如何使用WPF的几何图形、图像和可视化层。 DrawingVisualDemo 绘制可视化层示例。 GeometryDrawingDemo 几何图形绘制示例。 MiniLanguageDemo 迷你几何语言使用示例。 PathGeometriesDemo1 路径几何图形的演示。 第18章(\C18) 示例描述:本章演示如何使用WPF数据绑定基础。 BindingToElementDemo 绑定到元素属性的示例。 BindingToObject 绑定到对象的示例。 DataBindingToTable 绑定到数据表示例。 第19章(\C19) 示例描述:本章演示如何使用WF进行编程入门。 AnswerToRiddleNormal 使用传统语法的猜迷游戏示例。 AnswerToRiddleWF 使用WF的猜迷游戏示例。 ApprovalOrder 订单批核WF示例程序。 SimpleStateMachine 简单的状态机示例程序。 WorkflowruntimeEvent 工作流运行时引擎事件。 第20章(\C20) 示例描述:本章介绍WF的标准活动。 CAGDemo ConditionedActivityGroup活动使用示例。 EventHandlingScopeActivityDemo 使用EventHandlingScopeActivity活动示例。 InvokeWorkflowDemo 使用InvokeWorkflowActivity活动执行其他工作流实例。 ParallelActivityDemo ParallelActivity活动使用示例。 ParallelReplicatorDemo ParallelActivity和ReplicatorActivity活动示例。 ReplicatorActivityDemo ReplicatorActivity活动使用示例。 RuleConditionDemo 活动的规则条件示例。 SuspendAndTerminate 挂起和终止活动示例。 UsingEventDrivenActivity EvenDrivenActivity使用示例。 VotingServicesDemo 一个投票服务示例程序。 WhileActivityDemo WhileActivity活动使用示例 第21章(\C21) 示例描述:本章介绍WF的基本服务。 PersistenceDemo 持久化服务使用示例。 SimpleTrackingSample 简单的追踪服务示例。 第22章(\C22) 示例描述:本章详细分析了一个基于WF的工作流批核系统。 WorkflowApprovalDemo 城市电力和照明工作任务批核系统示例代码。 第23章(\第23章) 示例描述:本章演示基本的WCF开发。 HelloWorld 第一个WCF程序。 第24章(\第24章) 示例描述:本章介绍WCF中有关通道和绑定的编程和配置。 basicHttpBinding绑定设置 basicHttpBinding的配置演示。 Datagram 演示了数据报传输模式的机制。 Duplex 演示了双工传输模式的机制。 msmqIntegrationBinding绑定设置 msmqIntegrationBinding的配置演示。 netMsmqBinding绑定设置 netMsmqBinding的配置演示。 netNamedPipeBinding绑定设置 netNamedPipeBinding的配置演示。 netTcpBinding绑定设置 netTcpBinding的配置演示。 Request-Reply 演示了请求-响应传输模式的机制。 wsDualHttpBinding绑定设置 wsDualHttpBinding的配置演示。 wsHttpBinding绑定设置 wsHttpBinding的配置演示。 绑定的设置 使用代码对绑定进行设置 状态改变事件 演示了如何响应状态改变事件 第25章(\第25章) 示例描述:本章演示了WCF中的契约编程。 WCF事件机制的实现 演示了WCF中事件的实现。 捕获异常示例 演示了WCF中异常的捕获。 操作契约的重载 服务契约的重载问题。 单程操作示例 演示了单程操作。 服务契约的WSDL 服务契约WSDL的示例。 集合数据契约 演示了集合数据契约的使用。 强类型消息契约 演示了强类型消息契约的使用。 弱类型消息契约 演示了弱类型消息契约的使用。 使用FaultCode和FaultReason示例 使用FaultCode和FaultReason的示例。 使用错误契约示例 使用错误契约示例。 使用具有继承结构的数据契约 演示了具有继承结构的数据契约。 数据契约的XSD 数据契约的XSD示例。 数据契约缺失成员 演示了数据契约缺失成员时的情况。 双程操作示例 双程操作的示例。 未捕获异常示例 未捕获异常示例。 序列化顺序 数据契约的序列化顺序。 第26章(\第26章) 示例描述:本章演示了WCF中的行为编程。 并行管理Multiple Multiple并发模式的示例。 并行管理Reentrant Reentrant并发模式的示例。 并行管理Single Single并发模式的示例。 代码添加元数据行为 演示使用代码添加元数据的行为。 单服务事务 单服务事务的示例 分布式事务 分布式事务的示例。 实例管理PerCall PerCall实例管理的示例。 实例管理PerSession PerSession实例管理的示例。 实例管理Single Single实例管理的示例。 显式使用事务类型 显示使用事务类型的示例。 第27章(\第27章) 示例描述:本章演示了WCF中和安全有关的配置和编程。 局域网内Windows平台系统的安全性 局域网内Windows平台系统的安全性编程。 配置宿主证书 演示了宿主证书的配置。 配置验证方法 验证方法的配置。 配置MembershipProvider 演示了MembershipProvider的配置。 配置角色提供程序 演示了角色提供程序的配置。 安全机制的跟踪配置 演示了安全机制的跟踪的配置。 第28章(\第28章) 示例描述:本章演示了一个实际WCF系统的编程。 自动化点滴管理系统 用WCF架构自动化点滴管理系统。
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。
自定义窗体的最大化、最小化和关闭按钮, C#移动无标题栏窗体的三种代码: C#移动无标题栏窗体的三种代码:第一种采用,需注意窗体上的控件是否把窗体覆盖了。。。MouseDown、MouseMove、MouseUp事件应该是鼠标所处位置最顶层的控件的事件 在窗体的类中声明两个变量 private Point mouseOffset; //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否按下 创建该窗体 MouseDown、MouseMove、MouseUp事件的相应处理程序 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { int xOffset; int yOffset; if (e.Button == MouseButtons.Left) { xOffset = -e.X ; yOffset = -e.Y ; mouseOffset = new Point(xOffset, yOffset); isMouseDown = true; } } private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (isMouseDown) { Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); Location = mousePos; } } private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { // 修改鼠标状态isMouseDown的值 // 确保只有鼠标左键按下并移动时,才移动窗体 if (e.Button == MouseButtons.Left) { isMouseDown = false; } } 第二种调用API 未验证 using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; private void Form1_MouseDown(object sender, MouseEventArgs e) { ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); } 第三种未验证 private bool isMouseDown = false; private Point FormLocation; //form的location private Point mouseOffset; //鼠标的按下位置 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); private const int WM_SYSCOMMAND = 0x0112;//点击窗口左上角那个图标时的系统信息 private const int SC_MOVE = 0xF010;//移动信息 private const int HTCAPTION = 0x0002;//表示鼠标在窗口标题栏时的系统信息 private const int WM_NCHITTEST = 0x84;//鼠标在窗体客户区(除了标题栏和边框以外的部分)时发送的消息 private const int HTCLIENT = 0x1;//表示鼠标在窗口客户区的系统消息 private const int SC_MAXIMIZE = 0xF030;//最大化信息 private const int SC_MINIMIZE = 0xF020;//最小化信息 protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_SYSCOMMAND: if (m.WParam == (IntPtr)SC_MAXIMIZE) { m.WParam = (IntPtr)SC_MINIMIZE; } break; case WM_NCHITTEST: //如果鼠标移动或单击 base.WndProc(ref m);//调用基类的窗口过程——WndProc方法处理这个消息 if (m.Result == (IntPtr)HTCLIENT)//如果返回的是HTCLIENT { m.Result = (IntPtr)HTCAPTION;//把它改为HTCAPTION return;//直接返回退出方法 } break; } base.WndProc(ref m);//如果不是鼠标移动或单击消息就调用基类的窗口过程进行处理 } private void Form1_Load(object sender, EventArgs e) { } ------------------------------- 如何在窗体标题栏左边的控制菜单加入自己的菜单啊? 我们一般在窗口标题栏点右键 或 按Alt+空格 可以弹出那个菜单。 ------解决方案-------------------- using System.Runtime.InteropServices; [DllImport( "user32.dll ")] public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport( "user32.dll ")] public static extern bool InsertMenu(IntPtr hMenu, uint uPosition, uint uFlags, uint uIDNewItem, string lpNewItem); public const int MF_BYCOMMAND = 0; public const int MF_STRING = 0; public const int MF_BYPOSITION = 0x400; public const int MF_SEPARATOR = 0x800; private const uint SC_ABOUT = 0x0001; public const int WM_SYSCOMMAND = 0x0112; private void Form1_Load(object sender, EventArgs e) { IntPtr vMenuHandle = GetSystemMenu(Handle, false); InsertMenu(vMenuHandle, 255, MF_STRING, SC_ABOUT, "About... "); } protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_SYSCOMMAND: if ((uint)m.WParam == SC_ABOUT) { MessageBox.Show( "Zswang 路过! "); } break; } base.WndProc(ref m); }

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧