跟我一起学WPF(2):WPF控件基础
WPF控件简介
通过上一篇XAML语言的介绍,我们知道,XAML是一个树形结构,同样,WPF控件作为构成整个XAML树的一部分,也是一个树形结构。我们看一个简单的例子。
<Button.Content>
<DockPanel>
<Image Source="F:\01.Code\01.MyCode\WpfApplication1\WpfApplication1\Resources\荷.jpg" Width=""/>
<TextBlock Text="红色" Foreground="Red" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="绿色" Foreground="Green" VerticalAlignment="Center"/>
<TextBlock Text="蓝色" Foreground="Blue" VerticalAlignment="Center"/>
</DockPanel>
</Button.Content>
界面展现效果如图:
没有接触过WPF的朋友可能会惊讶,一个button里怎么会有那么多内容?我们可以通过VS的对象浏览器查看Button类的继承关系为:
Button->ButtonBase->ContentControl->Control->FrameworkElement。
FrameworkElement是所有WPF界面元素的展现基类(FrameworkElement向上继承自UIElement->Object),Button继承ContentControl,使得Button具备了一个容器控件应有的特性,即允许Button拥有一个Content,而这个Content可以为另一个容
器或控件,至于里面具体是什么,完全取决于你想要什么。这也正是WPF的魅力所在,任何控件都是一个树形结构,且树形结构的每一级都可以自由定制,理论上我们可以自定义任何一个层级的样式,来实现任何我们想要的界面展现效果。
WPF控件分类
上面我们讲到了Button继承自ContentControl,应该说是属于一个内容控件,下面我们系统的对WPF控件进行一下分类,按照我自己的理解,我们有两种分类方法。
一、按照控件的继承特性分类
我们先看一下整个WPF界面元素类之间的继承关系:
- Panel:布局控件,包括Canvas、DockPanel、StackPanel等,可以容纳多个基本控件(Control)或者嵌套其他布局控件。用于整体界面的布局,Panel下的控件我们会在下一篇讲解。
- Control:基本控件
- ContentControl:内容控件,其内容只能是一个基本控件或布局控件,通常使用一个布局控件作为其Content,然后在布局空间里使用多个基本空间,从而实现复杂的界面效果,其下基本控件有Label、Button、Tooltip。
- HeaderContentControl:带标题的内容控件,继承自ContentControl,在ContentControl的基础上,增加了一个Header属性。其下基本控件有TabItem、GroupBox等
- ItemsControl:多条目控件,其下基本控件有ListBox、Menu等
- HeaderItemsControl:继承自ItemsControl,增加了Header属性,其下控件有MenuItem、TreeViewItem、ToolBar等
- TextBox:基本文本输入控件。
- TextBlock、Image:直接继承自FrameworkElemet基类,属于最普通的基本控件。
二、按照控件的感官特性分类
这里的感官特性我定义的是,站在一个普通用户的角度上,能看到、感知到的东西。这里讲WPF控件分为两类:
1、 基本控件:用户可以看到并与之交互的控件,如按钮、输入框等,主要涵盖上述的Control、TextBlock、Image部分
2、 布局控件:用户察觉不到的,却对这个系统界面布局有着决定性作用的容器类控件,主要涵盖上述Panel及其子类部分
文章在以后的描述中将以这种分类方法进行阐述。
WPF控件属性
通过上面的介绍,我们知道所有的控件(基本控件、容器控件)都继承自FrameworkElement这个基类,这个基类里定义了WPF控件用到的大部分属性,我们这里先对这些WPF控件都具有的属性进行介绍(常用的标红),后续分别介绍常用基本控件时再对独有的属性进行介绍。
- ActualHeight:获取此元素的呈现高度。
- ActualWidth:获取次元素的呈现宽度。
- BindingGroup:获取或设置用于该元素的 System.Windows.Data.BindingGroup
- ContextMenu:获取或设置该元素的上下文菜单,通常是邮件菜单。
- Cursor:获取或设置当鼠标指针悬停在此元素上时显示的光标
- DataContext:获取或设置元素参与数据绑定时的数据上下文。
- DefaultStyleKey:在使用或定义主题样式时,获取或设置用于引用此控件的样式的键。
- FlowDirection:获取或设置文本和其他UI元素在控制它们布局的任何父元素中的流动方向。是一个枚举值。默认值为 System.Windows.FlowDirection.LeftToRight
- FocusVisualStyle:获取或设置一个属性,该属性支持自定义将在此元素捕获键盘焦点时应用于此元素的外观、效果或其他样式特征
- ForceCursor:获取或设置一个值,该值指示此元素是否应该强制UI按照Cursor属性所声明的方式呈现光标。
- Height:获取或设置元素的建议高度。
- HorizontalAlignment:获取或设置在父元素(如面板或项控件)中构成此元素时应用于此元素的水平对齐特征。
- InputScope:获取或设置此元素使用的输入上下文
- IsInitialized:获取一个值,该值指示此元素是否已初始化。
- IsLoaded:获取一个值,该值指示是否已加载此元素以供呈现。
- Language:获取或设置适用于某个元素的本地化/全球化语言信息
- LayoutTransform:获取或设置在执行布局时应该应用于此元素的图形转换方式。
- LogicalChildren:获取此元素的逻辑子元素的一个枚举器。
- Margin:获取或设置元素的外边距。认值是所有属性都等于 0(零)的 System.Windows.Thickness。
- MaxHeight:获取或设置元素的最大高度约束。
- MaxWidth:获取或设置元素的最大宽度约束。
- MinHeight:获取或设置元素的最小高度约束。
- MinWidth:获取或设置元素的最小宽度约束。
- Name:获取或设置元素的标识名称。该名称提供一个引用,以便当 XAML 处理器在处理过程中构造标记元素之后,后台代码可以对该元素进行引用。
- OverridesDefaultStyle:获取或设置一个值,该值指示此元素是否合并了主题样式中的样式属性。
- Parent:获取此元素的逻辑父级元素。
- Resources:获取或设置本地定义的资源字典。
- Style: 获取或设置此元素在呈现时使用的样式。
- Tag: 获取或设置一个可用于存储有关此元素的自定义信息的任意对象值。
- TemplatedParent: 获取一个对此元素的模板父级的引用。如果此元素不是通过模板创建而成,则此属性并不相关
- ToolTip: 获取或设置在UI中为此元素显示的工具提示对象。
- Triggers: 获取直接在此元素上建立或在子元素中建立的触发器的集合。
- VerticalAlignment:获取或设置在父元素(如面板或项控件)中组合此元素时应用于此元素的垂直对齐特征。
- VisualChildrenCount: 获取此元素内的可视化子元素的数目。
- Width: 获取或设置元素的宽度。
其中读写属性(带有获取或设置描述的属性)可以在XAML中使用,只读属性(只有获取描述的属性)只能在后台代码中使用。
WPF控件声明
通过一个简单的Button的定义阐述一下Wpf控件的使用
1、 在XAML中声明
可以从工具箱找到Button控件直接拖拽到窗体上,然后会在相应位置生成一条XAML语句,个人推荐使用手写XAML的方式,确保控件出现在你想要的地方。
<Button Height="30" Width="120" Name="myButton"/>
这条语句声明了一个Button对象,且该Button对象的名称为myButton,高度为30,宽度120,我们在后台代码可以直接访问并使用这个对象,如:通过
mybutton.Height=25;可将该Button对象的高度修改为25。
2、 在后台.CS代码中声明
Button myButton = new Button(); myButton.Height = ; myButton.Width = ;
下一篇我们将学习WPF中Label、TextBLock、Button、TextBox等基本控件的使用方法。
跟我一起学WPF(2):WPF控件基础的更多相关文章
- 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步
深入理解MVC MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...
- Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件
本文告诉大家一个令人震惊的消息,Windows Community Toolkit 有一个大更新,现在的版本是 3.0 .最大的提升就是 WinForm 和 WPF 程序可以使用部分 UWP 控件. ...
- WPF中Ribbon控件的使用
这篇博客将分享如何在WPF程序中使用Ribbon控件.Ribbon可以很大的提高软件的便捷性. 上面截图使Outlook 2010的界面,在Home标签页中,将所属的Menu都平铺的布局,非常容易的可 ...
- WPF 调用WinForm控件
WPF可以使用WindowsFormsHost控件做为容器去显示WinForm控件,类似的用法网上到处都是,就是拖一个WindowsFormsHost控件winHost1到WPF页面上,让后设置win ...
- InteropBitmap指定内存,绑定WPF的Imag控件时刷新问题。
1.InteropBitmap指定内存,绑定WPF的Imag控件的Source属性 创建InteropBitmap的时候,像素的格式必须为PixelFormats.Bgr32, 如果不是的话在绑定到I ...
- 在WPF程序中将控件所呈现的内容保存成图像(转载)
在WPF程序中将控件所呈现的内容保存成图像 转自:http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 有的时候,我们需要将控 ...
- 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...
- 在WPF的WebBrowser控件中抑制脚本错误
原文:在WPF的WebBrowser控件中抑制脚本错误 今天用WPF的WebBrowser控件的时候,发现其竟然没有ScriptErrorsSuppressed属性,导致其到处乱弹脚本错误的对话框,在 ...
- 浅尝辄止WPF自定义用户控件(实现颜色调制器)
主要利用用户控件实现一个自定义的颜色调制控件,实现一个小小的功能,具体实现界面如下. 首先自己新建一个wpf的用户控件类,我就放在我的wpf项目的一个文件夹下面,因为是一个很小的东西,所以就没有用mv ...
- WPF 滚动文字控件MarqueeControl
原文:WPF 滚动文字控件MarqueeControl WPF使用的滚动文字控件,支持上下左右滚动方式,支持设置滚动速度 XAML部分: <UserControl x:Class="U ...
随机推荐
- springmvc转springboot过程中访问jsp报Whitelabel Error Page错误
前言: 虽然springboot内嵌了一个tomcat,但是这个内嵌的tomcat不支持jsp页面,所以需要引入其他包 解决: maven引入以下包即可 <dependency> < ...
- windows git gui右键sublime打开当前文件编辑
git安装目录\Git\libexec\git-core\git-gui.tcl的 proc create_common_diff_popup 下追加: $ctxm add command \ -la ...
- 知名网站内部资料:WEB页面内容优化管理与性能技巧
回想一下,以前我们不得不花费大量时间去优化页面内容(图片.CSS等等),如今用户有更快速的互联网链接,我们似乎能够使用更大的图像或更大的闪 存文件,里面包含的有视频或者图片.然而,随着移动开发的兴起, ...
- R5—字符串处理/正则表达式
R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...
- 渐变色之location概念.
CHENYILONG Blog 渐变色之location概念.全屏幕13-12-22 上午10:18 © chenyilong. Powered by Postach.io Blog
- 【leetcode 简单】 第八十五题 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
- Node程序debug小记
有时候,所见并不是所得,有些包,你需要去翻他的源码才知道为什么会这样. 背景 今天调试一个程序,用到了一个很久之前的NPM包,名为formstream,用来将form表单数据转换为流的形式进行接口调用 ...
- spring-boot-全局异常
Spring Boot默认的异常处理机制 默认情况下,Spring Boot为两种情况提供了不同的响应方式. 一种是浏览器客户端请求一个不存在的页面或服务端处理发生异常时,一般情况下浏览器默认发送的请 ...
- 【连接查询】mySql多表连接查询与union与union all用法
1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...
- Hibernate5笔记5--关联关系映射
关联关系映射: 关联关系,是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系.实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键,即,使 ...