深入浅出WPF-05.控件与布局
控件与布局
突出特点: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.控件与布局的更多相关文章
- WPF 基础 - 控件与布局
1. 前言 1. 数据驱动 UI WPF 是数据核心.主动的,UI 从属数据并表达数据.是被动的: 不再是 UI 驱动数据,而是数据驱动 UI: 2. 控件的定义 控件.数据内容.行为(控件响应用户操 ...
- 《深入浅出WPF》学习总结之控件与布局
一.控件到底是什么 控件的本质是“数据+算法”——用户输入原始数据,算法处理原始数据并得到结果数据.问题就在于程序如何将结果数据展示给用户.同样一组数据,你可以使用LED阵列显示出来,或者是以命令行模 ...
- WPF 的内部世界(控件与布局)
目录 一.控件与布局 前言 为什么要写WPF呢? 我一开始算是比较抵触WPF的,因为用的人少吗.感觉都是窗体应用能和Winform有什么区别.可是我错了,非常感谢我的讲师,给我推荐刘铁猛的<深入 ...
- 创建 WPF 工具箱控件
创建 WPF 工具箱控件 WPF (Windows Presentation Framework) 工具箱控件模板允许您创建 WPF 控件,会自动添加到 工具箱 安装扩展的安装. 本主题演示如何使用模 ...
- Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...
- WPF常用控件应用demo
WPF常用控件应用demo 一.Demo 1.Demo截图如下: 2.demo实现过程 总体布局:因放大缩小窗体,控件很根据空间是否足够改变布局,故用WrapPanel布局. <ScrollVi ...
- WPF 分页控件 WPF 多线程 BackgroundWorker
WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...
- WPF第三方控件盘点
WPF统一的编程模型.语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评 ...
- WPF 设置控件阴影后,引发的Y轴位置变化问题
原文:WPF 设置控件阴影后,引发的Y轴位置变化问题 背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之间 ...
随机推荐
- springboot与通用mapper的整合
找到springboot工程下的pom.xml文件,导入如下的依赖jar包 <!--配置通用Mapper start--> <dependency> <groupId&g ...
- WPF Grid新增框选功能
有时候会有框选的需求,类似EXCEL一样,画一个框选择里面的子控件. 选择后比如可以将子控件的Border设置为红色边框 说下这个功能的大致原理.背景是一个Grid,比如里面放了很多的Button. ...
- C++ 子类调用父类的方法,静态方法的调用
#include <iostream> class A { public: A(); ~ A(); virtualvoid say() { std::cout << &quo ...
- 安装Ubuntu服务器版 + 远程连接ssh +更换阿里云源
安装Ubuntu服务器版 1.点击 "开启此虚拟机",开始安装. 2.默认选择English,英文版安装,直接按Enter键即可. 3.默认选择"Install Ubun ...
- 如何配置https
1.创建证书:keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey 其中姓氏和组织名称为登录时的域名:如localho ...
- 在Spring中使用静态工厂时发生的无法得到对象的问题
因为我测试时,使用的是之前的包Spring 3.x一类的jar包,发现我的代码毫无问题,但是就是运行不出来,后面去Spring官网上发现,JDK6+至少都要使用Spring4.x了,而为了配合JDK8 ...
- MongoDB学习笔记一(MongoDB介绍 + 基本指令 + 查询语句)
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩 ...
- 10个最酷的Linux单行命令
下面是来自 Commandlinefu 网站由用户投票决出的 10 个最酷的 Linux 单行命令,希望对你有用. sudo !! 以 root 帐户执行上一条命令. python -m Simpl ...
- 用C++实现的增强Euler筛法程序
运行示例 PS H:\Read\num\x64\Release> .\eulerSievePro EulerSievePro: a method to find out all primes b ...
- Django中使用MySQL数据库的连接配置
1. 安装pymysql pip install pymysql 2. 导入 # 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置 import pymysql ...