自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 MVVM中RadioButton等一对多控件的绑定

MVVM中RadioButton等一对多控件的绑定当我们要进行性别这一属性绑定的时候,我们会发现,两个RadioButton控件都跟一个Gender属性关联。其实我们在绑定控件时还会遇到这样一个问题:属性是一个bool类型,但需要绑定控件的Visibility属性。这个问题也可以在本文介绍的方法得到解决。控件在绑定时,是可以设置一个Converter的。Converter有两个方法,分别是Convert和ConvertBack。Convert用于将数据格式化之后,显示到控件上。而ConvertBac

2022-05-29 15:07:19 462

原创 MVVM跨页面数据传输

MVVM跨页面数据传输一、MVVM是什么?MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可

2022-05-18 15:03:11 655

原创 【无标题】

WPF MVVM--命令和事件接下来我们要做的事情,是把点击登录按钮的事件也在ViewModel里实现。若不是用MVVM模式,可能XAML文件里是这样的:而跟XAML文件相关的CS文件里则是这样的:如此一来,前端和后端的代码又耦合在一起了。其实,命令和事件都是可以绑定的,就像数据一样。我们先来了解一下命令。ICommand是所有命令的接口,它主要完成两件事情,这个命令能否被执行,以及执行命令。例如当用户名为空时,我们可能会禁用按钮。当登录按钮跟一个命令绑定在...

2022-05-08 09:26:06 161

原创 WPF MVVM--数据绑定

WPF MVVM--数据绑定一、数据绑定要达到的效果数据绑定要达到什么效果呢,就是在界面中绑定了数据源之后,数据在界面上的修改能反映到绑定源,同时绑定源的修改也能反映到界面上。从界面反映到绑定的数据源是很容易理解的,因为在绑定过程中我们指定了DataContext和Binding的对象,很容易找到绑定的源并修改。但数据源修改时怎么通知界面呢?因为ViewModel中被绑定的属性并不知道谁绑定了它,如果在ViewModel中存一个View的引用,在数据发生变化时修改View,这无疑又将ViewMode

2022-04-28 10:34:10 1557

原创 WPF MVVM--事件绑定

WPF MVVM--事件绑定事件转命令在我们大多数拥有Command依赖属性的控件,大多数是由于继承了ICommandSource接口,ICommandSource接口拥有三个函数成员,ICommand接口类型属性Command,object 类型属性CommandParameter,IInputElement 类型属性CommandTarget,而基本继承着ICommandSource接口这两个基础类的就是ButtonBase和MenuItem,因此像Button,Checkbox,RadioBu

2022-04-20 09:17:28 1498

原创 ​MVC/MVVM模式特点及区别

MVC/MVVM模式特点及区别一.概述MVC,MVP,MVVM是三种常见的前端架构模式(Architectural Pattern),它通过分离关注点来改进代码组织方式。不同于设计模式(Design Pattern),只是为了解决一类问题而总结出的抽象方法,一种架构模式往往能使用多种设计模式。MVC模式是MVP,MVVM模式的基础,这两种模式更像是MVC模式的优化改良版,他们三个的MV即Model,view相同,不同的是MV之间的纽带部分。本文主要介绍MVC与MVVM的应用与...

2022-04-10 09:10:30 496

原创 WPF--XAML资源

WPF--XAML资源资源是可以在应用程序的不同位置重用的对象。XAML资源的示例包括画笔和样式。每个框架级别的元素(FrameworkElemen或FrameworkContentElement)都有一个resource属性,该属性包含资源定义的资源(作为ResourceDictionary)。可以在任何元素上定义资源,但是资源通常是在根元素上定义的。当在页面根元素上定义一个资源时,页面逻辑树中的所有元素都可以访问它,并且您可以重用相同的资源来设置接受该资源表示的类型的任何属性的值。可以将资源引用

2022-03-28 08:36:51 619

原创 XAML和自定义类

XAML和自定义类可扩展应用程序标记语言(XAML)支持使用任何公共语言运行库(CLR)语言定义自定义类或结构,然后使用XAML标记(包括在同一标记文件中混合使用 Windows Presentation Foundation (WPF)定义的XAML和自定义类的XAML标记)访问该类的功能。本主题讨论自定义类要用作XAML元素时所必须满足的要求。应用程序或程序集中的自定义类可以使用两种不同的方法定义XAML中使用的自定义类:在生成主Windows Presentation Foundation

2022-03-20 15:18:52 442

原创 WPF--名称范围

WPF--名称范围名称范围既是一种概念,也是用于存储对象的XAML定义名称及其实例等效项之间的关系的编程对象。加载XAML应用程序的页面时,即在 WPF 托管代码中创建了名称范围。作为编程对象的名称范围由INameScope接口定义,并且还由实际类NameScope实现。加载的XAML应用程序中的名称范围处理XAML页时,即对该页的根元素创建了名称范围。该页中指定的每个名称都会添加到相关的名称范围中。作为常见根元素(例如Page和Window)的元素总是控制名称范围。如果在标记中某个元素(例

2022-03-08 14:54:56 195

原创 WPF--依赖属性

WPF--依赖属性大家都知道WPF带来了很多新的特性,其中一个就是引入了一种新的属性机制——依赖属性。依赖属性出现的目的是用来实现WPF中的样式、自动绑定及实现动画等特性。依赖属性的出现是WPF这种特殊的呈现原理派生出来的,与.NET普通属性不同的是,依赖属性的值是依靠多个提供程序来判断的,并且其具有内建的传递变更通知的能力。依赖属性基本应用在了WPF的所有需要设置属性的元素。依赖属性根据多个提供对象来决定它的值 (可以是动画、父类元素、绑定、样式和模板等),同时这个值也能及时响应变化。依赖属性

2022-03-01 15:54:56 2788

原创 WPF--模板化

WPF之模板化数据模板在本示例应用程序中,有一个绑定到照片列表的ListBox控件。此ListBox当前的外观如下所示:大多数控件都具有某种类型的内容,这些内容通常来自绑定到的数据。在本示例中,数据为照片列表。在WPF中,使用DataTemplate可以定义数据的可视表示形式。基本上,输入DataTemplate的内容决定了数据在呈现的应用程序中的外观。在我们的示例应用程序中,每个自定义Photo对象都具有一个字符串类型的Source属性,该属性指定图像的文件路径。当前,照片对象显示为文

2022-02-24 16:29:12 351

原创 WPF--属性系统

WPF--属性系统Windows Presentation Foundation(WPF)提供了一组服务,这些服务可用于扩展公共语言运行库(CLR)属性的功能。这些服务通常统称为WPF属性系统。由 WPF 属性系统支持的属性称为依赖项属性。本概述介绍WPF属性系统以及依赖项属性的功能,这包括如何在可扩展应用程序标记语言(XAML)中和代码中使用现有的依赖项属性。本概述还介绍了依赖项属性所特有的方面(如依赖项属性元数据),并说明了如何在自定义类中创建自己的依赖项属性。先决条件本主题假设您在CLR和

2022-02-24 16:24:57 227

原创 WPF--路由事件

WPF--路由事件本主题描述Windows Presentation Foundation (WPF)中路由事件的概念。本主题定义路由事件术语,描述路由事件如何通过元素树来路由,概述如何处理路由事件,并介绍如何创建您自己的自定义路由事件。先决条件本主题假设您对如下内容有基本的了解:公共语言运行库(CLR)、面向对象的编程以及如何用树的概念来说明WPF元素之间的关系。为了按照本主题中的示例操作,您还应当了解可扩展应用程序标记语言(XAML)并知道如何编写非常基本的 WPF 应用程序或页。什么是

2022-02-24 16:11:18 393 1

原创 WPF--样式设置

WPF--样式设置Windows Presentation Foundation(WPF)样式设置和模板化是指一套功能(样式、模板、触发器和演示图板),应用程序、文档或用户界面(UI)的设计人员使用这些功能可以创建更好的视觉效果,也可以对其产品的统一外观进行标准化。尽管作者或设计人员可以对应用程序的外观逐个进行大量自定义操作,他们还是需要一个功能强大的样式设置和模板化模型,以便在应用程序内部和应用程序之间维护和共享外观。Windows Presentation Foundation(WPF)就提供了这样

2022-02-24 16:03:01 658

原创 WPF--复选框

WPF--复选框复选框用于勾选或者勾掉某一个选项,在后台代码中表现为一个布尔型值。还是直接来看代码吧,更形象:复选框使用非常简单,在第二个复选框中,我使用了IsChecked属性设置默认为勾选,再没别的属性好用的了。你还可以使用IsChecked属性在后台代码中来判断某个复选框是否是勾选状态。用户内容复选框继承于ContentControl基类,因此可以设置用户内容到旁边。像上面的例子中,编写一些文字,WPF就会把这些文字放到一个文本块中显示。还可以把任何类型的控件放到里面.

2021-12-29 11:01:45 1368

原创 WPF中的数据绑定

WPF中的数据绑定绑定模式通过上一文章中的示例,学习了简单的绑定方式。在这里的示例,要学习一下绑定的模式,和模式的使用效果。首先,我们来做一个简单示例,这个示例是根据ListBox中的选中项,去改变TextBlock的背景色。将 TextBlock 的背景色绑定到在 ListBox 中选择的颜色。在下面的代码中针对TextBlock的 Background 属性使用绑定语法绑定从 ListBox 中选择的值。代码如下。如果用户在 ListBox 中选择了一种颜色,那么Te...

2021-11-07 16:49:02 1622

原创 布局之UniformGrid

布局之UniformGridUniformGrid介绍了前面的Grid,接下来介绍的这个UniformGrid就是Grid的简化版,每个单元格的大小相同,不需要定义行列集合。每个单元格始终具有相同的大小,每个单元格只能容纳一个控件,将自动按照定义在其内部的元素个数,自动创建行列,并通常保持相同的行列数。UniformGrid中没有Row和Column附加属性,也没有空白单元格。与Grid布局控件相比,UniformGrid布局控件很少使用。Grid面板是用于创建简单乃至复杂窗口布局的通用工具。.

2021-10-27 14:57:47 377

原创 布局之Grid

布局之Grid一、GridGrid顾名思义就是“网格”,它的子控件被放在一个一个实现定义好的小格子里面,整齐配列。Grid和其他各个Panel比较起来,功能最多也最为复杂。要使用Grid,首先要向RowDefinitions和ColumnDefinitions属性中添加一定数量的RowDefinitions和ColumnDefinitions元素,从而定义行数和列数。而放置在Grid面板中的控件元素都必须显示采用附加属性语法定义其放置所在的行和列,它们都是以0为基准的整型值,如果没有显式设置任何..

2021-10-18 10:00:46 313

原创 布局之WrapPanel与StackPanel

布局之WrapPanel与StackPanel一、WrapPanelWrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行。Orientation——根据内容自动换行。当Horizontal选项看上去类似于Windows资源管理器的缩略图视图:元素是从左向右排列的,然后自上至下自动换行。Vertical 选项看上去类似于Windows资源管理器的列表视图:元素是从上向下排列的,然后从左至右自动换行。I

2021-10-12 09:26:30 969

原创 布局介绍与Canvas

布局介绍与Canvas这篇文章是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感觉这个软件没有多少使用价值。一、总体介绍WPF的布局控件都在System.Windows.Controls.Panel这个基类下面,使用WPF提供的各种控件在WPF应用程序中界面进行布局,同时对各种子控件(如按钮、文本框,下拉框等)进行排列组合。Pane类的公共属性很多.

2021-09-28 09:14:09 179

原创 WPF基础--绑定(二)

WPF基础--绑定(二)绑定组件从基础模型,可以知道,绑定有四个组件:绑定目标对象、绑定目标属性(依赖项属性)、绑定源、绑定源值路径。举个例子:XMAL文件:后台文件:运行结果:这个例子下,用户在TextBox框中输入字符串,只有当用户接着点击一下按钮或者将输入焦点改变到其他地方,TextBlox的字符串才会改变成和TextBox输入框的字符串一样。绑定源,这里例子是mcl;记住绑定源指的是对象; 绑定路径,可以完全理解为绑定源的某个属性...

2021-09-17 14:45:10 277

原创 WPF基础--绑定(一)

WPF基础--绑定(一)首先了解一下大致的意思:WPF中的数据绑定:是在应用程序UI与业务逻辑之间建立连接的过程,其关键是System.Windows.Data.Binding对象,它会把两个对象(UI对象与UI对象之间,UI对象与.NET数据对象之间)按照指定的方式粘合在一起,并在他们之间建立一条通信通道,绑定一旦建立,接下来的应用生命周期中它可以自己独立完成所有的同步工作。 数据绑定是绑定的一种重要类型,而绑定是MVVM架构中的重要组成部分,MVVM架构可以实现UI与业务逻辑分离。一、什么是

2021-09-09 08:42:07 554

原创 WPF数据模板

WPF数据模板数据模板常用在3种类型的控件, 下图形式:Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式; 针对列表类型的控件,例如树形控件,下拉列表,列表控件,可以修改其中的ItemTemplate; 修改ContentTemplate,例UserControl控件的数据展现形式。1. CellTemplate 模板下面用一个例子, 来演示CellTemplate使用。例子实现一个DataGrid 展示一个普通的...

2021-08-17 16:30:22 480

原创 样式(Style)和触发器

样式(Style)和触发器样式(Style)是组织和重用格式化选项的重要工具。样式封装了一系列属性设置细节;触发器,顾名思义, 触发器可以理解为, 当达到了触发的条件, 那么就执行预期内的响应, 可以是样式、数据变化、动画等。触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一个或多个条件执行Setter中的属性改变。一、样式(Style)WPF中的各类控件元素, 都可以自由的设置其样式,而样式则是组织和重用格式化选项的重要工具。不是使用重复的...

2021-08-06 09:50:26 406

原创 WPF的路由事件

事件(Event)Windows消息机制中重要概念之一,最常见的人机交互手段之一 XAML帮助应用管理用户输入,执行不同的行为 引入增强型事件处理系统-Routed Event(路由事件) 事件常常被用于控制更改通知操作一、事件基础语法 基础语法:<ObjectName EventName="EventHandle">XAML:<!--定义按钮--> <Button Click="Button_Click"/> C#://事件 p.

2021-07-27 16:32:56 151

原创 《进销存管理系统——“系统管理”模块》项目研发阶段性总结

《进销存管理系统——“系统管理”模块》项目研发阶段性总结项目概要登录页面(图1):图1然后我们来看看系统的主要模块有哪些,如下(图2):整个“进销存管理系统”中,分别有:系统设置、进货管理、销售管理、库存管理、统计报表、往来账务这几个模块,其中每个模块中还有属于它定义功能的小模块。系统管理:里面包括商品管理、供货商设置、客户设置、员工设置、操作员设置、角色设置。进货管理:主要包括采购进货、采购退货、采购入库、生产入库、往来账务、采购入库查询。销售管理:商品销售、顾客

2021-07-17 16:11:40 706 1

原创 C#--正则表达式

C#正则表达式正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。定义正则表达式下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。字符转义 字符类 定位点 分组构造 限定符 反向引用构造 备用构造 替换 杂项构造(1)字符转义正则表达式中的反斜杠字符(\)指示其后跟的字符是特殊字符,或应按原义解释该字符。下表列出了转义字符:(2)字符类字符类与一组字符中的任何一个字符.

2021-07-17 15:39:05 190 1

原创 C#--异常处理

C# 异常处理异常是在程序执行期间出现的问题。C#中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C#异常处理时建立在四个关键词之上的:try、catch、finally和throw。try:一个try块标识了一个将被激活的特定的异常的代码块。后跟一个或多个catch块。 catch:程序通过异常处理程序捕获异常。catch关键字表示异常的捕获。 finally:finally块用于执行给定的语句,不管异常是否被抛出

2021-07-07 11:02:52 248

原创 C#--多态性

C#--多态性C# 多态性多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。一、静态多态性在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:函数重载 运算符重载运算符重载将在下一章节讨论,接下来我们将讨论函数重载。二、函数重载您可以在同一个范围内对相同的函数名有多

2021-06-27 16:34:26 218 2

原创 C#--可空类型(Nullable)

C# 可空类型(Nullable)C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null值。例如,Nullable< Int32 >,读作"可空的 Int32",可以被赋值为 -2,147,483,648 到 2,147,483,647 之间的任意值,也可以被赋值为 null 值。类似的,Nullable< bool >变量可以被赋值为 true或 false 或 null。在处理数据库和其他包含可

2021-06-16 10:10:48 225

原创 C#--运算符(三)

赋值运算符下图列出了C#支持的赋值运算符:请看下图的实例,了解C#中所有可用的赋值运算符:当上图的代码被编译和执行时,它会产生下列结果:Line 1 - = c 的值 = 21Line 2 - += c 的值 = 42Line 3 - -= c 的值 = 21Line 4 - = c 的值 = 441Line 5 - /= c 的值 = 21Line 6 - %= c 的值 = 11Line 7 - <<= c 的值 = 44

2021-06-07 10:28:38 427 1

原创 C#--运算符(二)

上次我们了解了运算符中的算术运算符和关系运算符,这次我们就来了解一下除了算术、关系运算符的其中的两种运算符:逻辑运算符、位运算符。当然还有赋值运算符、杂项运算符,但是我们这次主要要了解的就是:逻辑运算符和位运算符。首先先来了解一下逻辑运算符是什么样的。逻辑运算符下表显示了 C# 支持的所有逻辑运算符。假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:实例请看下面的实例,了解 C# 中所有可用的逻辑运算符:当上面的代码被编译和执行时,它会产生下列结果:Line 1 -

2021-05-26 11:18:50 234 2

原创 C#--泛型(Generic)

C#泛型(Generic)泛型(Generic)允许我们延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许我们编写一个可以与任何数据类型一起工作的类或方法。我们可以通过数据类型的替代参数编写## 标题类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下图这个简单的实例将有助于我们理解这个概念:当上图的代码被编译和执行时,它会产生下列结果:0 5 10 15 20a b c d e泛型(Generic)的

2021-05-17 10:14:18 142 1

原创 C#--运算符

运算符是一种告诉编译器执行待定的数学或逻辑操作的符号。C#有丰富的内置运算符,分类如下:算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符这篇文章将解释一下算术运算符、关系运算符这两个运算符。接下来让我们来了解C#运算符是什么、怎么用。算术运算符下表显示了C#支持的所有算术运算符。假设变量A的值为10,变量B的值为20,则:请看下图的实例,了解C#中所有可用的算术运算符:当上图的代码被编译和执行时,它会产生下列结果:Line 1 - c 的值是31Line 2 -

2021-05-08 15:26:17 133

原创 对JavaScript的理解

1. JavaScript介绍JavaScript是互联网上最流行的脚本语言,这门语言可以用于HTML和web,更可广泛用于服务器、PC、笔记本电脑、平板电脑、和智能手机等设备。JavaScript是一种轻量级的编程语言,也是可插入HTML页面的编程代码,JavaScript插入HTML页面后,可由所有的现代浏览器执行。2. JavaScript用法在HTML中的脚本必须位于 之间的代码行包含了 JavaScript:不需要知道上面的代码,只需要明白,浏览器会解释标签中的JavaScript:

2020-08-18 14:46:34 464

原创 ASP.NET MVC的介绍与用法

1. 介绍先来简单的介绍一下ASP.NET是一个使用HTML、CSS、JavaScript和服务器脚本创建网页和网站的开发框架。ASP.NET支持三种不同的开发模式:1、Web Pages:(Web 页面)2、MVC:(Model View Controller 模型-视图-控制器)3、Web Forms:(Web 窗体)MVC 模式定义 Web 应用程序带有三个逻辑层:1、业务层(模型逻辑)2、显示层(视图逻辑)3、输入控制(控制器逻辑)我们现在学习了MVC架构,那么我们就来看看MVC的庐

2020-08-18 14:39:16 710

原创 SQL 语句2

我们在数据库上执行的大部分工作都是由SQL语句完成,另外得知道 SQL 对大小写并不敏感SQL 中最重要的 DDL 语句: · Create database - 创建新数据库… · Alter database - 修改数据库 · Create table - 创建新表 …· Alter table - 变更(改变)数据库表…· Drop table - 删除表…· Create index - 创建索引(搜索键)… · Drop index - 删除索引…CREATE INDEX 语句在表上创建一个简单

2020-08-09 20:33:42 70

原创 SQL 语句1

我们在数据库上执行的大部分工作都是由SQL语句完成,另外得知道 SQL 对大小写并不敏感SQL DML:我们可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。查询和更新指令构成了 SQL 的 DML 部分:· select- 从数据库表中获取数据 · update - 更新数据库表中的数据 · delete- 从数据库表中删除数据 · insert into - 向数据库

2020-08-09 20:27:23 82

原创 JQuery学习总结

JQuery学习总结现在已经学过JQuery 我们就来简单的总结一下: 1.()方法:可以通过()方法: 可以通过()方法:可以通过()方法来获得页面的指定节点,参数是某种CSS的选择器。 var userNameNode=$("#userName");获取页面userName节点。 $()方法的参数是一个DOM对象时,这个方法相当于把DOM对象转换成JQuery对象。 $()方法的参数如果是一段正确的HTML文本,则可以创建一个DOM节点,并包装成JQuery对象。 创建一个文本框var inputOb

2020-08-09 20:17:33 136

原创 金融后台管理系统设计

金融后台管理系统设计(撰写时间:2019年7月10日 作者:李梦熙)做后台网站首先得考虑做的是关于什么的网站,有什么用处,然后就是这个网站适用于什么人或是什么年龄段的人,还有就是有什么人会用这个网站。我这次做的是一个金融的后台管理系统,后台管理系统的主要内容就是一些数据,然后就是为了方便管理某些东西,让管理人员更加的快捷的工作。开始我是一头雾水的,根本不知道该怎么去做这个后台,之前我们也有一...

2019-07-14 21:06:10 2056

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除