国防教育网站建设说明书,个人网站涉及企业内容,seo网站平台,企业手机微网站系统php通过示例对C#程序的结构逻辑进行研究梳理#xff0c;虽然通过阅读相关书籍#xff0c;但是来的效果更慢。一下相关内容可能有误#xff0c;请谨慎听取。
TaskToDoList-master
1.XAML
“XAML”是WPF中专门用于设计UI的语言#xff0c;优点是
1.XAML可以设计出专业的UI和…通过示例对C#程序的结构逻辑进行研究梳理虽然通过阅读相关书籍但是来的效果更慢。一下相关内容可能有误请谨慎听取。
TaskToDoList-master
1.XAML
“XAML”是WPF中专门用于设计UI的语言优点是
1.XAML可以设计出专业的UI和动画好用
2.XAML不需要专业的编程知识它简单易学、结构清晰易学
3.XAML使设计师能直接参与软件开发随时沟通、无需二次转化高效
4.XAML最大的优点它让UI和逻辑的剥离。XAML是一种单纯的“声明型语言”它只能用来声明一些UI元素、绘制UI和动画根本无法在其中加入程序逻辑这就强制地把逻辑代码从UI代码中赶走了这样UI的元素统统在UI层逻辑相关的代码统统都在逻辑层形成了“高内聚-低耦合”的结构这样的机构前提底层逻辑相同的情况下可以大改他的UI界面而不会对后端的逻辑代码有影响。
1.1 APP.xaml
在新建WPF的项目后APP.xaml 是程序的主体它的作用就是声明程序的进程会是谁同时指定程序的主窗体是谁。
XAML是一种由XML派生而来的语言所以很多XML中的概念在XAML是通用的XAML中使用标签声明元素标签有两种第一种就是有起始标签和终止标签/加在和/标签的内XAML代码表示这个标签的内容。如果没有内容就用第二种标签空标签/。XAML是一种“声明”式语言当看见应该标签就意味着声明了一个对象对象之间的层级关系要么是并列、要么是包含全都体现在标签的关系上 1.2 x名称空间详解
x名称空间的特征Attribute
x:Class作用是告诉XAML编译器将XAML标签的编译结果与后台代码中指定的类合并 x:Name的作用是显式地告诉XAML编译器为这个对象声明引用变量。 使用Name 和 x:Name的效果一样取决于控件是否Name属性建议直接使用x:Name,代码同意性和可读性更高
x:Key的作用是为资源贴上用于检索的索引 在WPF中几乎每个元素都有自己的Resources属性这个属性是“Key-Value”式的集合只要把元素放进这个集合这个元素就成为资源字典中的一个条目为了检索到这个条目就必须为它加上x:Key。
x:Type当我们在XAML中想表达某个数据类型时就需要使用x:Type标记扩展 s:Static是一个很常用的标记扩展它的功能是在XAML文档中使用数据类型的static成员。因为XAML不能编写逻辑代码所以使用x:Static访问的static成员一定是数据类型的属性或字段。 x:Static说白就是让UI界面的XAML可以调用C#的数据属性或字段
1.3 Attribute Property 特征和属性 以上代码就是WIndow标签的Attribute特征其中的Title(标题、窗体展示的标题)、Height、Width是Window对象的Property属性。
1.4 XAML语法
XAML是一种声明性语言XAML编译器会为每个标签创建一个与之对应地对象。对象创建出来后要对它地属性进行必要地初始化才有使用地意义。XAML中为对象属性赋值共有两种语法。
1使用字符串进行简单赋值 2、使用属性元素Property Element进行复杂赋值 能使用字符串赋值就别用啰嗦的属性元素赋值充分利用默认值去除默认值。
在.NET事件处理机制中可以为对象的某个事件指定一个能与该事件匹配的成员函数当这个事件发生时.NET运行时会调用这个函数即表示这个事件的相应和处理。因此我们把这个函数称为“事件处理器”。以Button控件为例 1.5 控件于布局
WPF中是数据驱动UI数据是核心是主动的UI从属于数据并表达数据、是被动的。WPF把那些能够展示数据、响应用户操作的UI元素称为控件。控件所展示的数据我们称为控件的“数据内容”控件在响应用户操作后会执行自己的一些方法或以事件的形式通知应用程序我们称为控件的“行为”或“算法内容”。
可以把控件想象成一个容器容器里装的东西就是它的内容。控件的内容可以直接是数据也可以是控件。当控件的内容还是控件的时候就形成了控件的嵌套。我们把被嵌套的控件称为子级控件。因为运行控件嵌套所以WPF的UI会形成一个树形结构。
控件是内存中的对象控件的内容也是内存中的对象。控件通过自己的某个属性引用着作为其内容的对象这个属性称为内容属性。“内容属性”是个统称具体到每种控件上内容属性都有自己确切的名字有的叫Content有的叫Child有些控件的内容可以时集合其内容属性有叫Items或Children的。
ContentControl族
均派生自ContentControl类它们都是控件(Control)内容属性的名称为Content只能由单一元素充当其内容
ContentControl族包含的控件 HeaderedContentControl族
它们都派生HeaderedContentControl类HeaderedContentControl是ContentControl的派生类它们都是控件用于显示带标题的数据除了用于显示主体内容的区域外控件还具有一个显示标题Header的区域内容属性为Content和Header无论是Content还是Header都只能容纳一个元素作为其内容。
HeaderedContentControl族包含的控件 Expander GroupBox HeaderedContentControl TabItem
ItemsControl族
均派生自ItemsControl类他们都是控件用于显示列表化的数据内容属性为Items或ItemsSource每种ItemsControl都对应自己的条目容器
ItemsControl族包含的控件 HeaderedIemsControl族
均派生自HeaderItemsControl类它们都是控件用于显示列表化的数据同时可以显示一个标题。内容属性为Items、ItemsSource和Header
Decorator类
均派生自Decorator类起UI装饰作用内容属性为Child只能由单一元素充当内容
Decorator族元素 TextBlock和TextBox
它俩的作用就是显示文本。TextBlock显示文本但不能编辑所以又叫静态文本。TextBox则允许用户编辑其中的内容。
Shape族元素
Shape族元素它们只是简单的视觉元素不是控件就是专门用来在UI上绘制图形的一类元素。这类元素没有自己的内容我们可以使用Fill属性为它们设置填充效果还可以使用Stroke属性为它们设置边线的效果。
均派生自Shape类用于2D图形绘制无内容属性使用Fill属性设置填充使用Stroke属性设置边线
Panel族元素
均派生自Panel抽象类主要功能是控制UI布局内容属性为Children内容可以是多个元素Panel元素将控制它们的布局
Panel族元素 Grid
Grid网格。可以自定义行和列并通过行列的数值、行高和列宽来调整控件的布局。近似于HTML中的Table。Grid的特点如下
可以定义任意数量的行和列非常灵活行的高度和列的宽度可以使用绝对数值、相对比例或自动调整的方式进行精确设定并可以设置最大和最小值内部元素可以设置自己的所在行和列还可以设置自己纵向跨几行、横向跨几列可以设置Children元素的对齐方向 Grid可接受地宽度和高度地单位 对于Grid的行高和列宽我们可以设置三类值 绝对值double 数值加单位后缀 比例值double数值后加上一个星号(*) --1*可以简写为* 自动值字符串Auto 为控件指定行和列遵循以下规则
行和列都是从0开始计数
指定一个控件在某行就为这个控件的标签添加Grid.Row“行编号”这样一个特征若编号为0(即控件处于首行)可以省略不写
指定一个控件在某列就为此控件添加Grid.Column“列编号”这样的特征若编号为0则可以省略不写
若控件需要跨多个行和列请使用Grid.RowSpan“行数”和Grid.ColumnSpan列数 StackPanel
StackPanel可以把内部元素在纵向或横向上紧凑排列、形成栈式布局通俗地讲就是把内部元素像垒积木一样。StackPanel使用3个属性来控制内部元素地布局它们是Orientation、HorizontalAlignment和VerticalAlignment
StackPanel的三个属性 Canvas
Canvas翻译过来就是“画布”显然在Canvas里布局就像画布上画控件一样。当控件被放置在Canvas里时就会被附加上Canvas.X和Canvas.Y属性
Canvas使用的场合包括
一经设计基本上不会再有改动的小型布局(如图标)艺术性比较强的布局需要大量使用横纵坐标进行绝对点定位的布局依赖于横纵标的动画 DockPanel
DockPanel内的元素可以通过Left、Top、Right、Buttom四个值来指定元素会指定方向累积DockPanel还有一个重要的属性bool类型的LastChildFill它的默认值是True。当LastChildFill属性值为True时DockPanel内最后一个元素的DockPanel.Dock属性值会被忽略这个元素会把DockPanel内部所有剩余控件充满。这个布局控件的Dock和小编之前学的Dock属性用法差不多 WrapPanel
WrapPanel内部采用的是流式布局。WrapPanel使用Orientation属性来控制流延伸的方向WrapPanel会排列尽可能多的控件排不下的控件将会新起一行一列继续排序 1.6 样式设置
1.设置全局样式
通过在 Window.Resources标签下设置button样式这样所有的button按钮都默认使用该设定的样式 Window.ResourcesStyle TargetTypeButton!--控件类型--Setter PropertyBackground ValueRed/!--设定样式值--Setter PropertyFontSize Value20/Setter PropertyHeight Value50/Setter PropertyWidth Value300//Style/Window.ResourcesStackPanelButton Content登录/Button Content退出/Button Content忘记密码//StackPanel2.设置不同button样式
在使用中可能不同地方的按钮需要设置不同的属性可以通过给样式设置标识符的方式设置button按钮的不同样式 Window.ResourcesStyle x:KeyLoginStyle TargetTypeButton!--通过x:Key给该样式添加一个唯一的标识符--Setter PropertyBackground ValueGreen/Setter PropertyFontSize Value20/Setter PropertyHeight Value50/Setter PropertyWidth Value300//StyleStyle x:KeyQuitStyle TargetTypeButtonSetter PropertyBackground ValueRed/Setter PropertyFontSize Value20/Setter PropertyHeight Value50/Setter PropertyWidth Value300//Style/Window.ResourcesStackPanelButton Style{StaticResource LoginStyle} Content登录/!--StaticResource 代表静态资源--Button Style{StaticResource QuitStyle} Content退出/Button Content忘记密码//StackPanel3. 抽取相同属性
有时在设置属性的时候不同按钮的属性虽然不同但是有部分属性是相同的可以将这部分相同的属性单独提取出来进行设置。 Window.ResourcesStyle TargetTypeButton!--基础样式--Setter PropertyBackground ValueWhiteSmoke/Setter PropertyFontSize Value20/Setter PropertyMargin Value20,10//StyleStyle x:KeyLoginStyle TargetTypeButton BasedOn{StaticResource {x:Type Button}}!--继承基础的button样式--Setter PropertyBackground ValueGreen//StyleStyle x:KeyQuitStyle TargetTypeButton BasedOn{StaticResource {x:Type Button}}Setter PropertyBackground ValueRed//Style/Window.ResourcesStackPanelButton Style{StaticResource LoginStyle} Content登录/Button Style{StaticResource QuitStyle} Content退出/Button Content忘记密码//StackPanel2.cs文件