控件与布局

突出特点:1、专门的UI设计语言XAML,无需像MFC那样使用编程语言设计UI。2、前几代在UI和数据交互方面是由消息Message到控件事件,始终是把UI控件放在主导位置而把数据放在了次要位置,用UI驱动数据的改变。WPF在事件驱动的基础上引入了数据驱动的概念,让数据作为主导位置。UI的主要作用就是数据展示,故而数据是核心,WPF正是这样的。

以后的WPF学习,一定要树立一种观念,UI是作为数据的展示,数据才是核心。UI要由数据进行驱动,UI只是数据的表达。

在WPF中,何为控件?我们把那些能够展示数据、响应用户操作的UI元素称之为控件。控件所展示的数据,称之为控件的数据内容,控件在响应用户的操作后,会执行自己的一些方法或者以事件Event的形式通知应用程序,这些称之为控件的行为或者算法内容。所以,控件就是数据和行为的载体,而无需强调调试的长相。

我们将常用的控件大致分为6类:

  • 布局控件:可以容纳多个控件或者嵌套其他布局控件,比如Grid、StackPanel、DockPanel等。他们共同的父类是Panel

  • 内容控件:只能容纳一个其他控件或者布局控件作为他的内容。Window、Button等。他们共同的父类是ContentControl,只能由单一元素充当其内容

    <StackPanel>
    <Button Width="163" Height="93" Click="Button_Click_1" Margin="10">
    <Button Content="Button" Width="91" Height="42" Click="Button_Click"/>
    </Button>
    <Button Width="163" Height="93" Click="Button_Click_1" Margin="10">
    <TextBlock Text="TextBlock"/>
    </Button>
    <Button Width="163" Height="93" Margin="10">
    <Image Source="avatar2.png"/>
    </Button>
    </StackPanel>

    Button控件中只能包含一个其他控件,如果需要包含多个,需要将多个控件放入一个布局中进行实现。

    <Button Width="163" Height="93" Margin="10">
    <StackPanel Orientation="Horizontal">
    <TextBlock Text="TextBlock" VerticalAlignment="Center"/>
    <Image Source="avatar2.png"/>
    </StackPanel>
    </Button>
  • 带标题的内容控件:相当于一个内容控件,但是可以加一个标题Header。标题部分也可以是一个控件或者布局。共同的父类HeaderedContentControl。内容属性为Content和Header。无论是Content还是Header,都只能容纳一个元素作为其内容。

    Expander,GroupBox,HeaderedContentControl,TabItem

  • 条目控件:可现实一列数据,一般情况下这列的数据类型相同。ListBox,ComboBox,主要用于展示集合类型的数据,共同父类ItemsControl。内容属性是Items或者ItemSource。每种ItemsControl都有自己对应的条目容器Item Container。

    Menu(MenuItem),MenuBase,ContextMenu(MenuItem),ComboBox(ComboBoxItem),ItemsControl,ListBox(ListBoxItem),ListView(ListViewItem),Tabcontrol(TabItem),TreeView(TreeViewItem),Selector,StatusBar(StatusBarItem)

  • 带标题的条目控件:相当于在条目控件上增加了一个标题显示区域。这类控件往往用于显示层级关系的数据。TreeViewItem、MenuItem、ToolBar三种,结点显示在Header区域,子级结点则显示在条目控件区域。共同父类HeaderedItemsControl。内容属性:Items,ItemsSource,Header

  • 特殊内容控件:这些控件比较独立

    起装饰作用的Decorator族。Border可以为一组控件增加边框。ViewBox可以对组织在一起的内容进行自由缩放。内容属性是Child,只能由单以元素充当内容。

    TextBlock可以容纳自由控制格式的文本,只能显示不能编辑。TextBox只能容纳一个字符串,不需要太多的格式显示,但是可以编辑。

    Image容纳图片。

    Shape族:用于装饰,没有具体的内容。使用属性Fill进行填充,使用Stroke属性设置边线。

    Panel族:主要控制UI的布局,内容可以是多个元素。Canvas,Grid,DockPanel,TabPanel,UniformGrid,WrapPanel等

深入浅出WPF-05.控件与布局的更多相关文章

  1. WPF 基础 - 控件与布局

    1. 前言 1. 数据驱动 UI WPF 是数据核心.主动的,UI 从属数据并表达数据.是被动的: 不再是 UI 驱动数据,而是数据驱动 UI: 2. 控件的定义 控件.数据内容.行为(控件响应用户操 ...

  2. 《深入浅出WPF》学习总结之控件与布局

    一.控件到底是什么 控件的本质是“数据+算法”——用户输入原始数据,算法处理原始数据并得到结果数据.问题就在于程序如何将结果数据展示给用户.同样一组数据,你可以使用LED阵列显示出来,或者是以命令行模 ...

  3. WPF 的内部世界(控件与布局)

    目录 一.控件与布局 前言 为什么要写WPF呢? 我一开始算是比较抵触WPF的,因为用的人少吗.感觉都是窗体应用能和Winform有什么区别.可是我错了,非常感谢我的讲师,给我推荐刘铁猛的<深入 ...

  4. 创建 WPF 工具箱控件

    创建 WPF 工具箱控件 WPF (Windows Presentation Framework) 工具箱控件模板允许您创建 WPF 控件,会自动添加到 工具箱 安装扩展的安装. 本主题演示如何使用模 ...

  5. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

    最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...

  6. WPF常用控件应用demo

    WPF常用控件应用demo 一.Demo 1.Demo截图如下: 2.demo实现过程 总体布局:因放大缩小窗体,控件很根据空间是否足够改变布局,故用WrapPanel布局. <ScrollVi ...

  7. WPF 分页控件 WPF 多线程 BackgroundWorker

    WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...

  8. WPF第三方控件盘点

    WPF统一的编程模型.语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评 ...

  9. WPF 设置控件阴影后,引发的Y轴位置变化问题

    原文:WPF 设置控件阴影后,引发的Y轴位置变化问题 背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之间 ...

随机推荐

  1. 手把手教你AspNetCore WebApi:Swagger(Api文档)

    前言 小明已经实现"待办事项"的增删改查,并美滋滋向负责前端的小红介绍Api接口,小红很忙,暂时没有时间听小明介绍,希望小明能给个Api文档.对于码农小明来说能不写文档就尽量不要写 ...

  2. .NET Core程序发布报错:project.assets.json”没有“.NETCoreApp,Version=v3.1/win-x64”的目标。确保已运行还原,且“netcoreapp3.1”已包含在项目的 TargetFrameworks中。

    在控制台中使用命令发布.NET Core程序的时候,报如下的错误: project.assets.json"没有".NETCoreApp,Version=v3.1/win-x64& ...

  3. C# Fakes

    我们为了测试程序的运行逻辑,需要写单元测试来验证程序的逻辑.有的时候我们的逻辑需要依赖于外界的事物(需要一个文件,eg:数据库),我们不可能在运行单元测试的计算机都创建一个数据库,所以这个时候我们就需 ...

  4. Sublime Text3 显示左侧的目录树

    file->open folder选择一个文件夹,打开一个新窗口把原来的关掉 View->Sise Bar->Hide Side Bar就可以了

  5. Spring 钩子之BeanFactoryPostProcessor和BeanPostProcessor的源码学习,FactoryBean

    BeanFactoryPostProcessor 是用于增强BeanFactory的(例如可以增强beanDefination), BeanPostProcessor是用于增强bean的,而Facto ...

  6. web整合Spring和Hibernate

    上一篇是简单整合web和Spring, 这一篇是整合hibernate: 连接池c3p0: spring5.0, hibernate5.0 jars: ------------------------ ...

  7. 了解Flask

    了解Flask 什么是Flask Flask 是一个微框架(Micro framework),所谓微框架,它就是很轻量级的,作者划分出了Flask应该负责什么(请求路由.处理请求.返回响应).不应该负 ...

  8. docker《三》单机部署项目容器,nginx负载均衡

    接着<二> 创建一个网段(和二在一个网段) docker network create --subnet=172.19.0.0/24 pro-net docker run -d --nam ...

  9. zabbix告警推送至个人微信

    文章原文 自从接触zabbix后,就一直想着怎么才能把告警推送到个人微信上.有这样的想法主要是个人微信的使用频率远远要比钉钉,企业微信,邮箱,飞书等使用频率要高.比如我,就遇到过在周末的时候,因为没有 ...

  10. AFL++ Fuzz一个libexif例子

    CVE-2009-3895 首先在NVD找到漏洞描述如下: 大致意思是说:libexif 0.6.18 中的 libexif/exif-entry.c 中的 exif_entry_fix 函数中基于堆 ...