WPF之XAML 笔记.1

本文详细介绍了WPF中XAML的使用,包括DropShadowEffect属性、LinearGradientBrush渐变画刷,以及动画和控件模板的应用。XAML作为XML的扩展,用于构建用户界面,运行在CLR之上,通过元数据支持类型转换和对象实例化。文章还讨论了资源、触发器、故事版和缓动函数等概念,展示了如何自定义控件外观和响应事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XAML 是派生自 XML 的可扩展应用程序标记语言。
在WPF 中 XAML 用来开发用户界面 继承了XML的Tag,Attribute等语法
、在WPF中,XAML运行在CLR(公共语言运行库,指一种运行时环境,CLR是.NET Framework的主要执行引擎。和java虚拟机类似)之上,但它不编译为IL,而是编译为BAML代码,在运行时会被解析成CLR类型(Types)。

元数据:为了使运行时环境可以向可操控代码提供服务,语言编译器需要产生一种元数据,它将提供在使用语言中的类型、成员、引用的信息。运行时环境使用元数据定位并载入类,在内存中展开对象实例,解决方法调用,产生本地代码,强制执行安全性,并建立运行时环境的边界。

基本语法:
1、Tag语法=对象元素(Object Elements)
  每个标签即是一个对象元素,将被解析为一个WPF Framework(主要来自PresentationFramework.dll)中的类的实例。下面的代码就是一个对象元素,运行时会被解析为一个Button对象实例。

或写成

2、Attribute赋值语法
2.1 普通字符串赋值。下面代码给Button的Property和Event赋值。字符串将被通过包装好的TypeConverter来转换成对象。TypeConverter使用C#的Attribute技术来实现的。

2.2 标记扩展赋值。用花括号这种方式赋值就叫标记扩展赋值。常用的地方是在用到绑定和资源的时候。

2.3 属性元素赋值。有的时候简单字符串赋值不了的,就用属性元素赋值。

<Button.Content>aaa</Button.Content>

3、命名空间。
一般用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。如下例子,xmlns为引入命名空间的attribute。第一行xmlns是没有指定别名的,是默认命名空间,它指定的命名空间包含了微软提供所有的XAML控件的程序集。第二行xmlns别名是x,也是微软提供的命名空间,这里面主要包含了一些关于解析Xaml语言的程序集。第三行xmlns是自己引入的,开发人员自己写的控件等,可以通过命名空间这种方式引用到XAML文档来使用。



线性插值动画对象属性
from 动画从from 属性指定的值继续到正在进行动画处理的属性的基值或迁移动画的输出值,具体取决于迁移动画的配置方式

To 动画从进行动画处理的属性的基值或前动画的输出继续到To 属性指定的值。

by 动画从正在进行动画处理的属性的基值或前一动画的输出值继续到该值与by 属性指定值的和
:
duration 动画执行一次持续的时间长度,duration 的格式为 时:分:秒

动画播放控制属性
BeginTime 动画开始时间,默认单位是天,也可以指定为时:分:秒

repeatBehavior 用来声明动画重复次数,支持3种类型值:重复次数(格式–次数 +X)一个时间段(格式——时:分:秒);特殊值Forever(循环播放当前动画)

autoReverse 指定动画结束后是否向后继续播放,默认为 false, true 动画结束时会回到起始位置

speedRatio 用来增加或减少动画的速度,默认为 1,若增加 动画产生加速播放效果

FillBehavior 决定什么时候发生动画,什么时候结束, 默认为 holdEnd ,表示动画结束后保持当前值不变,也可以设置为Stop, 表示动画结束时属性再次回到起始值。

事件触发器:属性触发,数据触发 ,事件触发器
本质: 响应属性变化或事件,控制故事版动画,
可以在以下4个位置定义事件触发器。
a)、在样式中(Style.Triggers集合):属性触发器,事件触发器。
b)、在数据模板中(DataTemplate.Triggers集合)。
c)、在控件模板中(ControlTemplate.Triggers集合)。
d)、直接在元素中定义事件触发器(FrameworkElement.Triggers集合)。

控制播放:
在事件触发器中使用了一个动作时,加载动画的 BeginStoryboard 动作,然而一旦创建故事版,就可以使用其他动作故事版,这些动作类都继承自ControllableStoryboardAction类,控制故事版的主要类如下:ControllableStoryboardAction类,控制故事版的主要类如下:
控制故事板的动作类
名称 说明
PauseStoryboard 停止播放动画并且保持当前位置
ResumeStoryboard 恢复播放暂停的动画。
StopStoryboard 停止播放动画,并将动画时钟重新设置到开始位置。
SeekStoryboard 跳到动画时间线中的特定位置,如果当前动画正在播放,就继续从新位置播放。如果当前动画
是暂停的,就继续保持暂停。
SetStoryboardSpeedRatio 改变整个故事板的SpeedRatio属性值。
SkipStoryboardToFill 将故事板移动到时间线的终点。FillBehavior属性设置为HoldEnd,动画继续保持最后的值。
RemoveStoryboard 移除故事板,停止所有正在运行的动画,并将属性返回为原来的、最后一次设置的数值。
为成功地执行这些动作,必须在同一个Triggers集合中定义所有的触发器,
如果将BeginStoryboard动作的触发器和PauseStoryboard动作的触发器放置到不同的集合中,PauseStoryboard动作就无法工作。

缓动函数类:
缓动函数常用类
名称 说明 属性
BackEase 当使用EaseIn模式应用该缓动函数时,在动画开始之前拉回动画,当使用EaseOut模式应用该缓动函数时,允许动画稍微超越,然后拉回。 Amplitude属性决定了拉回和超越的量。默认值是1,可减小该属性值(大于0的任何值)以缩减效果,或增加该属性值放大效果。
ElasticEase 当使用EaseOut模式应用该缓动函数时,使动画超越其最大值并前后摆动,逐渐减慢。当时用EaseIn模式应用该缓动函数时,动画在其开始值周围前后摆动,逐渐增加。 Oscillations属性控制动画前后摆动的次数。

缓动函数常用类
名称 说明 属性
BackEase 当使用EaseIn模式应用该缓动函数时,在动画开始之前拉回动画,当使用EaseOut模式应用该缓动函数时,允许动画稍微超越,然后拉回。 Amplitude属性决定了拉回和超越的量。默认值是1,可减小该属性值(大于0的任何值)以缩减效果,或增加该属性值放大效果。
ElasticEase 当使用EaseOut模式应用该缓动函数时,使动画超越其最大值并前后摆动,逐渐减慢。当时用EaseIn模式应用该缓动函数时,动画在其开始值周围前后摆动,逐渐增加。 Oscillations属性控制动画前后摆动的次数。
BounceEase 执行与Elastic缓东函数类似的效果,只是弹跳永远不会超越初始值或最终值。 Bounce属性控制动画回调的次数(默认是2)
CircleEase 使用圆函数加速(使用EaseIn模式),或减速(使用EaseOut模式) 无
CublicEase 使用基于时间立方的函数加速,其效果与Circle类似,但是加速效果更缓和。 无
QuadraticEase 使用基于时间平方的函数加速,效果与CublicEase类似,但加速过程更明显。 无
QuarticEase 无
QuinticEase 无
SinEase 无
PowerEase Power
ExponentialEase Exponent

WPF动画使用的三种方法:
线性插值:一种是在开始值和结束值之间以逐步增加的方式改变属性的动画(线性插值过程)
关键帧:一种是从一个值突然变成另一值得动画(关键帧动画)。所有关键帧动画都使用 "类型名 + AnimationUsingKeyFrames " 的形式进行命名,比如StringAnimationUsingKeyFrames和ObjectAnimationUsingKeyFrames。某些数据类型有关键帧动画类,但没有插值动画类。例如,可使用关键帧为字符串应用动画,不能使用插值为字符串应用动画。然而,所有数据类型都支持关键帧动画,除非他们根本不支持动画。所有具有(使用插值)常规动画类的数据类型,也都有相应的关键帧动画的动画类型,
路径:贝塞尔曲线

AccelerationRatio和DeceleRation属性 压缩或拉伸某段动画,动画总时间不变。

AccelerationRatio 设置总时间的前面 部分的动画的播放的快慢。百分比

DeceleRation 设置总时间的后面 部分的动画的播放的快慢。百分比

WPF中默认窗口框架的外观,主要取决于Icon、Title、WindowsStyle、ResizeMode等属性。
AllowsTransparency 表示不允许窗体透明True
Icon 指定窗口的图标;   
Title 指定窗口的标题;   
WindowStyle 指定窗口样式,有4个取值:     
None,无边框;(当ResizeMode属性为NoResize时,仅剩下窗口核心。)     
SingleBorderWindow,单边框【默认】;     
ThreeDBorderWindow,3D边框;     
ToolBorderWindow,工具箱窗口;
ResizeMode 是指定大小调节样式,有4个取值:     
NoResize,不可调节,同时没有最大最小按钮;     
CanMinimize,不可调节。但可以最小化;(此时最大化按钮不可用)     
CanResize,可调节【默认】;     
CanResizeWithGrid,可根据网格调节;(窗口右下脚显示可调节网格)
WindowStyle 指定窗口样式,有4个取值:     
None,无边框;(当ResizeMode属性为NoResize时,仅剩下窗口核心。)
SingleBorderWindow,单边框【默认】;     
ThreeDBorderWindow,3D边框;     
ToolBorderWindow,工具箱窗口
WindowStartLocation 指定窗口初始位置,有3个取值:     
Manual,手工指定位置,表示可以通过设置其Top、Left属性值来决定窗口的初始位置;     
CenterScreen,屏幕中央;     
CenterOwner,父窗体中央;

逻辑资源
逻辑资源是WPF特有的资源类型,它是存储在元素的Resources属性中的.NET对象,通常需要共享给多个子元素。
换句话说,你可以声明一个SolidColorBrush对象当作一个逻辑资源,你也可以声明一个Style,
然后再后续的XAML中简单通过{StaticResource ResourceName}来使用。
资源定义需要有一个在ResourceDictionary中唯一的关键字x:Key(单独的ResourceDictionary中的键名不可以重复,
多个ResourceDictionary中键名可以重复,会根据在逻辑数上的lookup的顺序来就近生效)。
–>

控件模板
(1)其实WPF的每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应。
我们可以自定义一个模板来替换掉控件的默认模板以便打造个性化的控件
(2)与Style不同,Style只能改变控件的已有属性值(比如颜色字体)来定制控件,
但控件模板可以改变控件的内部结构(VisualTree,视觉树)来完成更为复杂的定制,
比如我们可以定制这样的按钮:在它的左办部分显示一个小图标而它的右半部分显示文本。
(3)要替换控件的模板,我们只需要声明一个ControlTemplate对象,并对该ControlTemplate对象做相应的配置,
然后将该ControlTemplate对象赋值给控件的Template属性就可以了
(4)ControlTemplate包含两个重要的属性:
1,VisualTree,该模板的视觉树,其实我们就是使用这个属性来描述控件的外观的
2,Triggers,触发器列表,里面包含一些触发器Trigger,我们可以定制这个触发器列表来使控件对外界的刺激发生反应,比如鼠标经过时文本变成粗体等。

IsMouseOver 鼠标划入事件,默认为 false 布尔类型


property 属性:
foreground 设置或获取前景色
Template 设置或获取控件模板

Bitmapeffect 获取或设置一个位图效果,该效果将直接应用到此元素所呈现的内容。这是一个依赖项属性

DropShadowEffect 属性:
Softness 设置或获取阴影的柔和度
Direction 设置和获取投影角度
Opacity 设置和获取阴影的不透明的
ShadowDepth 以微小偏移量在可视对象之后应用阴影。通过模拟虚构光源的投影来确定偏移量。
BitmapEffect 获取或设置一个位图效果,该效果将直接应用到此元素所呈现的内容。这是一个依赖项属性。

LinearGradientBrush 属性 一个渐变画刷
StartPoint 开始点坐标
EndPoint 结束点坐标

LinearGradientBrush 边框颜色
GradientStop 描述渐变中过渡点的位置和颜色。

<逻辑资源
逻辑资源是WPF特有的资源类型,它是存储在元素的Resources属性中的.NET对象,通常需要共享给多个子元素。
换句话说,你可以声明一个SolidColorBrush对象当作一个逻辑资源,你也可以声明一个Style,
然后再后续的XAML中简单通过{StaticResource ResourceName}来使用。
资源定义需要有一个在ResourceDictionary中唯一的关键字x:Key(单独的ResourceDictionary中的键名不可以重复,
多个ResourceDictionary中键名可以重复,会根据在逻辑数上的lookup的顺序来就近生效)。

trigger 属性触发器
BeginStoryboard 事件触发器
storyboard 故事版
DoubleAnimation 线性动画 变化
ColorAnimation 颜色动画 变化

RowDefinition 定义行
ColumnDefinitions 定义列
border 边框属性

GridientStop 描述渐变中过渡点的位置和颜色。

VerticalAlignment 水平对齐

Stretch
none 清空片内容 ;
fill 拉伸图片内容 ;
UniformToFill放大图片内容;
uniform 图片内容不变

对 元素对象的 状态和位置的设置

Foreground 字体颜色
FontSize 设置字体大小
FontFamily 设置字体的种类
FontWeight = “ bold” 字体加粗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值