系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实战03-控件(3-文本控件及列表控件) WPF进阶技巧和实战03-控件(5-列表.树.网格01) WPF进阶技巧和实战03-控件(5-列表.树.网格02) WPF进阶技巧和实战03-控件(5-列表.树.网格03) WPF进阶技巧和实战03-控件(5-列表.树.网格04) WPF进阶技巧和实战04-资…
系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实战03-控件(3-文本控件及列表控件) WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件) WPF进阶技巧和实战03-控件(5-列表.树.网格01) WPF进阶技巧和实战03-控件(5-列表.树.网格02) WPF进阶技巧和实战03-控件(5-列表.树.网格03) WPF进阶技巧和实战0…
数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPath属性设置),不可能包含多个字段或者图像的富列表. 数据模板就是这样一个能够突破这个最大限制,允许组合使用来自绑定对象的多个属性,以特定的方式排列他们并显示简单字符串的高级样式. 数据模板是一个定义如何显示绑定的数据对象的XAML标记,有两类控件支持数据模板: 内容控件:通过ContentTemp…
多点触控输入 多点触控输入和传统的基于比的输入的区别是多点触控识别手势,用户可以移动多根手指以执行常见的操作,放大,旋转,拖动等. 多点触控的输入层次 WPF允许使用键盘和鼠标的高层次输入(例如单击和文本改变)和低层次输入(鼠标事件和按键事件).多点触控输入同样应用了这种多层次的输入方式,WPF提供了3个独立的层次: 原始触控(raw touch):这是最低级的支持,可访问用户执行的每个触控.缺点是由应用程序负责将单独的触控消息组合在一起,并对他们进行解释.如果不准备识别标准触摸手势,反而希望创…
所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构: 设置控件内容对齐方式 (HorizontalContentAlignment,VerticalContentAlignment,Padding) 设置Tab键顺序 (TabIndex,IsTabStop) 绘制背景,前景,边框 (Background,Foreground,BorderBrush,BorderThickness) 支持格式化文本内容的尺寸和字体 (FontFamily,Fo…
数据视图 数据视图是在后台工作的,用于协调绑定数据的集合.使用数据视图可以添加导航逻辑.实现数据过滤.排序.分组. 当将集合或者DataTable绑定到ItemsControl控件时,会不加通告地在后台创建数据视图(位于数据源和绑定的控件之间).数据视图是进入数据源的窗口,可以跟踪当前项,并且支持各种功能(排序.过滤.分组等).这些功能和数据对象本身是相互独立的,这意味着可以在窗口的不同部分使用不同的方式绑定相同的数据源.例如:可将同一产品集合绑定到两个不同的列表,并对产品进行过滤显示不同的记录…
逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelper)的方法 名称 说明 FindLogicalNode 根据名称查找特定元素,从指定的元素开始并向下查找逻辑树 BringIntoView 如果元素在可滚动的容器中,并且当前不可见,就将元素滚动到视图中 GetParent 获取指定元素的父元素 GetChildren 获取指定元素的子元素 理解模…
列表控件 ItemsControl为列表项控件定义了基本功能,下图是ItemsControl的继承关系: 在继承自ItemsControl类的层次结构中,还显示了项封装器(MenuItem.TreeVIewItem),因为这些项(类)可以包含自己的项集合(从而实现数控件和菜单的嵌套关系和层次结构).在继承表中没有ComboBoxItem和ListBoxItem没有出现,那是因为他们不需要包含项的子集合,所以也就不继承自ItemsControl类. ItemsControl类中雨格式化相关的属性:…
在01节中,研究了如何开发自定义控件,下节开始考虑更特殊的选择:派生自定义面板以及构建自定义绘图 创建自定义面板 创建自定义面板是一种比较常见的自定义控件开发子集,面板可以驻留一个或多个子元素,并且实现了特定的布局逻辑以恰当地安排子元素.常见的基本类型的面板:StackPanel.DockPanel.WrapPanel.Canvas,Grid,TabPanel,ToolBarPverflowPanel,VirtualizingPanel. 两步布局过程 每个面板都有相同的功能:负责改变子元素尺寸…
完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚集其他元素的复合控件(按钮变成图像按钮,列表变成图像列表) 控件模板:所有WPF控件都是无外观的,这意味着他们具有硬编码的功能,但是他们的外观是通过控件模板单独定义的.使用新的控件模板替代默认模板,可重新构建基本控件 数据模板:所有派生自ItemsControl的类都支持数据模板,通过数据模板可创建…
数据提供者 在大多数的代码中,都是通过设置元素的DataContext属性或者列表控件的ItemsSource属性,从而提供顶级的数据源.当数据对象是通过另一个类构造时,可以有其他选择. 一种是作为窗口的资源定义数据对象.如果能够使用声明的方式构造对象,这种方法工作的很好,但是如果需要在运行时使用数据库等方式获取数据,这种技术就没有意义了.但是会出现部分开发人员采用这种方法,基本思路是在构造函数中获取所需的数据. <Window.Resources>     <local:PhotoLi…
理解路由事件 当有意义的事情发生时,有对象(WPF的元素)发送的用于通知代码的消息,就是事件的核心思想.WPF通过事件路由的概念增强了.NET事件模型.事件由允许源自某个元素的事件由另一个元素引发.例如:使用路由事件,来自工具栏按钮的单击事件可在被代码处理前上传到工具栏,然后上传到包含工具栏的窗口. 事件路由为在最合适的位置编写紧凑的.组织良好的用于处理事件的代码提供了灵活性.要使用WPF内容模型,事件路由是必须的,内容模型允许使用许多不同的元素构建简单元素,并且这些元素都拥有自己独立的事件集合…
ScrollViewer控件 直接继承ContextControl类,提供了虚拟界面,允许用户围绕更大的元素滚动.只能包含单个元素(ContextControl决定),但可以放置布局控件来实现多个任意元素的放置. 默认是垂直滚动,也支持水平滚动功能(需要将HorizontalScrollBarVisibility改成Visible或者Auto).可以通过鼠标操作滚动或者代码来滚动内容: LineUp()和LineDown(),这两个方法向上和向下移动的效果相当于单击一次垂直滚动条两端的箭头按钮…
ListView控件 ListView继承自简单的没有特色的ListBox,增加了对基于列显示的支持,并增加了快速切换视图或显示模式的能力,而不需要重新绑定数据以重新构建列表. ListView类继承自ListBox类,并使用View属性进行扩展(可以创建丰富的列表).通过两个样式来设置View,一个用于ListView控件,一个用于ListView控件的项. 使用GridView创建列 GridView类继承自ViewBase类,表示具有多列的列表视图,通过GridView.Columns集合…
依赖项属性 定义依赖项属性 注意:只能为依赖对象(继承自DependencyObject的类)添加依赖项属性.WPF中的元素基本上都继承自DependencyObject类. 静态字段 名称约定(属性末尾加上Property) Readonly(只能在静态构造函数中进行设置) public static readonly DependencyProperty ScalingRatioProperty = DependencyProperty.Register("ScalingRatio"…
Svg在WPF中的使用 方法1:拷贝svg中的部分代码转换成Geometry(作为Path的Data使用) 在vs或者直接打开svg,看到如下代码: <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&qu…
将元素绑定在一起 数据绑定最简单的形式是:源对象是WPF元素而且源属性是依赖项属性.依赖项属性内置了更改通知支持,当源对象中改变依赖项属性时,会立即更新目标对象的绑定属性. 元素绑定到元素也是经常使用的,可以使元素的交互自动化,而不必编写代码. 绑定表达式 Visibility="{Binding Path=IsChecked, ElementName=rdKer, Converter={StaticResource EqualVisibleConverter}, ConverterParame…
样式(style)是组织和重用格式化选项的重要工具.创建一系列封装某些细节的样式,然后通过属性来应用样式. 行为(behavior)是一款重用用户界面代码更有挑战性的工具.基本思想是:使用行为封装一些通用的UI功能.如果具有适当的行为,可使用一两行XAML标记将其附加到任何元素. 样式基础 样式就是可应用于元素的属性值集合.样式支持触发器,当属性发生变化时,可通过触发器改变控件的样式. 样式有5个重要属性: 属性 说明 Setters 设置属性值,自动关联事件处理程序的Setter对象或者Eve…
窗体 无边框 窗体无边框(最大化及标题位置)WindowStyle="None" 窗体透明 AllowsTransparency="True",必须设置窗体无边框,否则报错 SizeToContent属性,窗体大小可以根据内容自动调整,多语言版本时一般会使用 我习惯性的设置Window窗体的样式如下: <Border Margin="5" Background="#EEE" CornerRadius="5&qu…
资源集合 每个元素都有Resources属性,该属性存储了一个资源字典集合(它是ResourceDictionary类的实例).资源集合可以包含任意类型的对象,并根据字符串编写索引. 每个元素既可以访问自己的资源集合中的资源,也可以访问所有父元素 的资源集合中的资源,所以一般将资源集合放在窗口级别或者应用程序级别. 资源的引用分为动态.静态.静态资源在首次创建窗口时一次性地设置完毕.动态资源,如果发生了改变,就会重新应用资源.一般在下列情况下才需要使用动态资源属性: 资源具有依赖系统设置的属性(…
在之前的DataGrid的DataGridTemplateColumn列中,自定义了一个TextBox控件,但是在C#代码中提示找不到这个控件,导致无法对该控件进行操作.在网上搜索后,发现一些处理方法比较繁琐,下面这个方法最简便. xaml格式描述: <DataGrid Name=" ItemsSource="{Binding}" > <DataGrid.Columns> <DataGridTemplateColumn Header="…
内容控件(content control)是更特殊的控件类型,它们可包含并显示一块内容.从技术角度看,内容控件时可以包含单个嵌套元素的控件.与布局容器不同的是,内容控件只能包含一个子元素,而布局容器主要愿意可以包含任意多个牵头元素. 正如前面所介绍,所有WPF布局容器都继承自抽象类Panel,该类提供了对包含多个元素的支持.类似地,所有内容控件都继承自抽象类ContentControl.下图显示了ContentControl类的层次结构. 图 ContentControl类的层次结构 如上图所示…
在Word中,借助内容控件,可设计出具有特定功能的文档或模板.以下表格中简单介绍了几种常用的内容控件. 名称 简介 下拉列表内容控件 下拉列表包含了一个预先定义好的列表.和组合框不同的是下拉列表不允许用户编辑项. 纯文本内容控件 纯文本内容控件只能包含文本,不能包含其他项,例如表格.图片或其他内容控件. 富文本内容控件 与纯文本内容控件不同,富文本内容控件可以包含除文本以外的其他项,例如表格.图片或其他内容控件. 日期选取器内容控件 日期选取器内容控件包含一个日历控件,用于帮助用户输入日期. 组…
这一篇本来想先写风格主题,主题切换.自定义配套的样式.但是最近加班.搬家.新租的房子打扫卫生,我家宝宝6月中旬要出生协调各种的事情,导致了最近精神状态不是很好,又没有看到我比较喜欢的主题风格去模仿的,又不想降低教程的质量,所以就打算把风格的主题这一篇,放后面等我找到了我喜欢的主题,然后在开始仿写.这一篇先入门自定义控件. ​ WPF支持样式.内容控件和模板.因此不在刻意的强调自定义控件.这些特性为开发人员提供了多种方式来完善和扩展标准的控件,而不用派生新的控件类.通过以下几种方式能实现大部分需求…
在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什么地方.今天我们就来简单了解一下WPF中的三个带标题的内容控件,分别是GroupBox,TabControl和Expander 一.GroupBox控件 这个控件可以叫做分组控件,可以把已经用布局控件包装好的一系列的控件放到里面分为一个组,例如,我们可以放入RadioButton进去,那么就不用设置…
WPF内容控件 在WPF中,所有呈现在用户界面上的对象都称为用户界面元素.但是只有派生自System.Windows.Controls.Control类的对象才称为控件.内容控件通常是指具有Content属性的控件,Content属性并非定义在每个控件中,而是定义在基类System.Windows.Controls命名空间的ContentControl类中.注意:Content属性只接收单个内容元素. WPF内容控件分类 1.  直接继承ContentControl的控件 2.  继承Heade…
此处简单列举出布局控件外,其他常用的控件: Window:WPF窗口 UserControl:用户控件 Page:页 Frame:用来浏览Page页 Border:嵌套控件,提供边框和背景. Button:按钮控件 Calendar:日历.挂历 CheckBox:多选控件 ComboBox:下拉控件 ContentControl:内容控件,可以用于加载自定义UserControl控件 DataGrid:数据列表控件 DatePicker:日期选择器 DocumentViewer:文档查看,可以用…
原文:WPF 窗体基类实现的体验及实现回车到下一控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/jsyhello/article/details/7216509 1.窗体基类实现参考 http://weblogs.asp.net/psheriff/archive/2009/11/02/creating-a-base-window-class-in-wpf.aspx 2.基类不能像WinForm窗体一样写Loaded事件(写了也是不执行的)…
一.控件类 在WPF中和用户交互的元素,或者说.能够接受焦点,并且接收键盘鼠标输入的元素所有的控件都继承于Control类. 1. 常用属性: 1.1 Foreground:前景画刷/前景色(文本颜色) 1.2 Background:背景画刷/背景色 //使用RBG设置颜色 Btn_1.Foreground = , , )); //使用颜色枚举设置颜色 Btn_1.Foreground = new SolidColorBrush(Colors.DarkGoldenrod); //使用系统颜色枚举…
原文:WPF 后台获得 数据模板里的内容控件(DataTemplate) 假如      <Window.Resources> 里 有一个 Datatemplate 我想获得TextBlock XAML <DataTemplate x:Key="dtName"> <TextBlock Text="content"/> </DataTemplate> 后台代码 DataTemplate d = this.FindReso…