好消息,MPF计划2017年11月份全部开源关注【QQ群:206378966】。

1.   MPF文件格式

MPF主要包含三种类型的文件:

Application文件、ResourceDictionary文件、布局描述文件。

1.1.  Application文件

此文件描述应用程序的属性信息,其格式如下:

<Application  StartupUri="">

<Application.Resources>

</Application.Resources>

</ Application>

此文件必须以Application为根节点,此文件定义整个应用系统的公共资源,主窗口资源描述,Application里定义的资源在整个应用程序中优先级最低。

1.2.  ResourceDictionary文件

MPF资源文件里分为实体资源和样式资源,事实上,样式资源里通常引用实体资源;而样式应用于具体的控件元素, 资源采用x:Key进行定义,而且必须唯一。

实体资源在MPF里是最小不可分割的资源单元,独立描述特定的资源类型,目前MPF包含如下资源:

1.2.1.      ImageBrush

图像刷子,属性值如下:

Source:图像路径;

ViewCorner:四个边角,九宫格绘制四个边角将按照实际大小绘制。

ViewBox:图像实际绘制区域,分别为左、上、宽、高。

Opacity:图像绘制透明度,取值0至1。

Stretch:图像拉伸模式,Uniform:原始大小;UniformFill:原始大小填充;Fill:自动拉伸。

<ImageBrush  x:Key="name "  Source=" image.png"  Stretch="Uniform"  ViewBox="0,0,17,17" />

1.2.2.      SolidColorBrush

纯色刷子,格式如下:

<SolidColorBrush  x:Key="name"Color="0xFFFFFF" >

1.2.3.      LinearGradientBrush

线性渐变刷子,格式如下:

<LinearGradientBrush  x:Key="name"  StartPoint="0.5,0"  EndPoint="0.5,1" >

<GradientStop  Offset="0.0"  Color="#00FFFFFF" />

<GradientStop  Offset="0.5"  Color="#FFFFFFFF" />

<GradientStop  Offset="1.0"  Color="#00FFFFFF" />

</LinearGradientBrush>

StartPoint:开始渐变点;

EndPoint:结束渐变点;

1.2.4.      RadialGradientBrush

径向渐变刷子,格式如下:

<RadialGradientBrush  x:Key="name "  GradientOrigin="0.5,0"  RadiusX="0.5"  RadiusY="0.5">

<GradientStop  Offset="0.0"  Color="#00FFFFFF" />

<GradientStop  Offset="0.5"  Color="#FFFFFFFF" />

<GradientStop  Offset="1.0"  Color="#00FFFFFF" />

</RadialGradientBrush>

1.2.5.      CursorBrush

<Cursor  x:Key="split"Source="d:/split.cur" />;

1.2.6.      ControlTemplate

定义控件外观,后面会详细介绍;

1.2.7.      DataTemplate

定义数据的呈现外观,后面会详细介绍;

1.2.8.      Bitmap

图像资源,用于定义独立的图像,格式如下:

<Bitmap  x:Key="Head"  Source="Images/login/1_100.gif" />

1.2.9.      String、Rect、Point、Integer、Float

此类资源定义基本数据类型资源,格式如下:

<String  x:Key="name"  Value="Sharpui" />

<Rect  x:Key="name"  Value="0,0,1,1" />

<Point  x:Key="name"  Value="2,2" />

<Integer  x:Key="name"  Value="50" />

<Floa  tx:Key="name"  Value="50.25" />

数据类型资源包括系统和用户定义的数据类型,用户定义的数据类型资源前面需用local:作为前缀表明。

资源可以单独放在独立的文件里,也可以放在界面元素的资源描述节里;两者的描述格式是完全一致的,资源是可以继承,就是说子元素可以继承父元素的资源,以此类推,Application作为所有界面元素的根而存在,因此其定义的资源在整个应用系统中优先级最低。

一个标准的ResourceDictionary文件格式如下:

<ResourceDictionary   Name="Window1"   Width="500"  Height="500" >

<!--定义资源-->

<ImageBrush  x:Key="Brush1"   Source="res/image.png" />

<SolidColorBrush  x:Key="Brush2"   Color="Blue" />

<!--定义样式-->

<Style   TargetType="Button">

<!--定义属性-->

<Setter   Property="Background"  Value="Green" />

<!--定义样式触发器-->

<Style.Triggers>

<Trigger   Property="IsMouseOver"   Value="True">

<!--鼠标移到控件上时背景色变为蓝色-->

<Setter   Property="Background"  Value="Blue" />

</Trigger>

<Trigger   Property="IsPressed"  Value="True">

<!--鼠标按下控件背景色变为黄色-->

<Setter   Property="Background"   Value="Yellow" />

</Trigger>

</Style.Triggers>

</Style>

</ResourceDictionary>

当然,这里的Trigger还支持多条件触发,这里后面会具体讲解。

具体资源的格式、属性下面做具体描述。

1.3.  布局文件

此文件主要描述一个窗口的布局、布局引用的控件、控件的属性以及引用的资源等信息,界面引擎统一解析此文件,然后对窗口进行渲染,一个布局描述文件只能对应一个渲染窗口,其根节点被定义为Window(也可以是其它控件),格式描述如下:

<Window   Name="Window1"  Width="500"  Height="500" >

<!--定义窗口资源-->

<Window.Resources>

</Window.Resources>

<!--窗口子控件-->

<Button  Name="Button1">

<!--子控件资源-->

<Button.Resources>

</Button.Resources>

</Button>

</Window>

上面是一个标准的布局文件格式,布局文件包含资源描述和子控件描述。

1.4.  布局原理说明

系统布局是MPF关键部分,所有元素的布局都是相对于其父界面元素进行计算的,一般界面元素分为垂直和水平方向上的布局,水平方向包括Left、Center、Right、Stretch四个属性;垂直方向包括Top、Center、Bottom、Stretch四个属性,系统对水平和垂直上的这四个属性进行默认实现。

布局结合了元素的Width、Height和Margin以及Padding进行计算得到最终结果。

除了Stretch属性外,其余属性都需要元素的Width和Height支持,就是说必须设置Width和Height值,否则元素将不可见。

对于Left和Top,其布局原理如下:

对于Right和Bottom布局原理如下:

对于Center布局原理如下:

对于Stretch布局原理如下:

Stretch自动填充满父界面元素整个空间,然后四个边减掉Margin设定的值。

对于元素大小的测量仅仅在元素准备载入时初始化一次,系统运行过程中,具体元素可以根据需要重新调用进行测量。

MPF企业版-文件格式【02】 【QQ群:206378966】相关推荐

  1. MPF企业版-标签说明【03】 【QQ群:206378966】

    好消息,MPF计划2017年11月份全部开源关注[QQ群:206378966]. 1.   MPF标签 下面表格描述了MPF定义的标签,应用范围说明了标签作用的控件以及其所有派生的子控件. 1.1.  ...

  2. MPF企业版-简介【01】 【QQ群:206378966】

    好消息,MPF计划2017年11月份全部开源关注[QQ群:206378966]. 1. 什么是MPF MPF是居于DUI思想的一套界面引擎,采用纯c++开发,实现完整的消息处理机制.渲染引擎分离以及灵 ...

  3. 欢迎加入Hello China技术讨论群组-QQ群:38467832

    欢迎加入Hello China技术讨论群组-QQ群:38467832 在此群组内,我们可一起讨论Hello China及其它嵌入式操作系统的技术问题.应用问题以及其它相关问题. Hello China ...

  4. 打破传统天价SAP培训,开创SAP师徒之路,经验丰富的老顾问带徒弟 qq群150104068

    SAP领航社区,开设了一个导师性质的师徒圈子,类似大学导师带研究生,导师给学生安排课题.分配任务.分享资料,让学生自学提高.我们的教学方法是以自学为主,辅导为辅助,在实践中积累经验掌握原理.主要方向A ...

  5. 中毒了(QQ群搞笑聊天记录)

    这是今天在我的一个技术QQ群里的对话 作繭自縛          19:04:28 偶地胳膊今天突然疼得都抬不起来了啊.. 怎么办呀....55555555555555 _&[;闪版Qq'   ...

  6. 【软件群英会】QQ群 12月1日晚上聊天记录

    今天在[软件群英会]QQ群和大家聊了聊,也许有些内容对其他人也有帮助,所以摘录下来与大家分享之. !北京-周金根(22626496) 21:58:03  @DC_李小波 : #结对编程#体会:1.即使 ...

  7. 【07】QQ群管理公告小结:

    [07]QQ群管理公告小结: 01,请看公告遵守相关规定. 02,群内除QQ自带的缺省表情外(不是QQ的VIP或大图表情),禁止发送大表情,大图片(展示问题的屏幕截图除外), 03,修改群名片,格式: ...

  8. 我真的改变了很多,QQ群里同学们说的

    前天晚上开了一下QQ,并成功登录了服务器,这说明我输入的账号密码都正确,通过验证了(以上是废话).我们班也是有QQ群的,还有热心的同学帮忙开通了QQ校友,班级啥的,使得联系起同学来丝毫不费吹灰之力,太 ...

  9. 如何在QQ群里做广告进行推广【转】

    在十年前没有QQ或者说不会上网与对方聊天,那时还算是正常.那么时间推移到十年后的今天,你会上网但不知道腾讯有个QQ那是不是真的OUT了,对好多朋友来说一个QQ号就像是一个手机号一样的重要,一个QQ就如 ...

最新文章

  1. 脑电分析系列[MNE-Python-9]| 参考电极应用
  2. eclipse安装SVN插件的两种方法
  3. 风控项目-收集基础知识2
  4. 【机器学习基础】通俗讲解集成学习算法!
  5. ArrayBlockingQueue原理分析-put方法
  6. 设计一个具有等待队列的连接池
  7. .Net Core微服务系列--理论篇
  8. 合流超几何函数_【初中数学大招流】从平面几何到解析几何
  9. java apktoo_apktool.jar
  10. 解决 ‘Could not fetch URL https://pypi.python.org’的问题
  11. DecimalFormat的使用
  12. Python 虚拟环境迁移路径后pip报错解决记录
  13. torch的拼接函数_pytorch常用函数总结(持续更新)
  14. MySQL技术内幕 - 第一章 MySQL体系结构和存储引擎
  15. 对接海康威视监控-hls实现h5播放
  16. cmder下载配置并设置为vscode默认终端
  17. MATLAB遗传算法求函数最值
  18. zip 的ZipEntry转换为InputStream
  19. 常用智能小车电机驱动模块选型
  20. 结构力学支座位移与温度荷载、力法与矩阵位移法、图乘法核心思想

热门文章

  1. 我的世界服务器怎么增加npc,自定义NPC (Custom Npcs)
  2. Effective java 总结1 - 创建和销毁对象
  3. 黄河旋风你敢去吗?《材料的、找工作的》必看,求置顶啊
  4. 机器人和志愿者用Wayback机器链接替换了900万个损坏的Wikipedia参考
  5. 阿里云智能媒体服务 oss文档转换及预览
  6. Flask+Gunicorn+Ngnix部署笔记
  7. 6月适配进展|优炫数据库与40余款产品完成兼容认证
  8. linux清理内存占用
  9. Electron应用中实现调用外接摄像头并拍照上传
  10. python 美化ppt_看我用Python瞬间制作数百份PPT,赢得小姐姐的下午茶