WPF进阶技巧和实战06-控件模板】的更多相关文章

系列文章链接 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…
原文:WPF笔记(1.9 样式和控件模板)--Hello,WPF! 资源的另一个用途是样式设置: <Window >  <Window.Resources>    <Style x:Key="myStyle" TargetType="{x:Type TextBlock}">      <Setter Property="VerticalAlignment" Value="Center"…
逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelper)的方法 名称 说明 FindLogicalNode 根据名称查找特定元素,从指定的元素开始并向下查找逻辑树 BringIntoView 如果元素在可滚动的容器中,并且当前不可见,就将元素滚动到视图中 GetParent 获取指定元素的父元素 GetChildren 获取指定元素的子元素 理解模…
数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPath属性设置),不可能包含多个字段或者图像的富列表. 数据模板就是这样一个能够突破这个最大限制,允许组合使用来自绑定对象的多个属性,以特定的方式排列他们并显示简单字符串的高级样式. 数据模板是一个定义如何显示绑定的数据对象的XAML标记,有两类控件支持数据模板: 内容控件:通过ContentTemp…
列表控件 ItemsControl为列表项控件定义了基本功能,下图是ItemsControl的继承关系: 在继承自ItemsControl类的层次结构中,还显示了项封装器(MenuItem.TreeVIewItem),因为这些项(类)可以包含自己的项集合(从而实现数控件和菜单的嵌套关系和层次结构).在继承表中没有ComboBoxItem和ListBoxItem没有出现,那是因为他们不需要包含项的子集合,所以也就不继承自ItemsControl类. ItemsControl类中雨格式化相关的属性:…
ListView控件 ListView继承自简单的没有特色的ListBox,增加了对基于列显示的支持,并增加了快速切换视图或显示模式的能力,而不需要重新绑定数据以重新构建列表. ListView类继承自ListBox类,并使用View属性进行扩展(可以创建丰富的列表).通过两个样式来设置View,一个用于ListView控件,一个用于ListView控件的项. 使用GridView创建列 GridView类继承自ViewBase类,表示具有多列的列表视图,通过GridView.Columns集合…
在01节中,研究了如何开发自定义控件,下节开始考虑更特殊的选择:派生自定义面板以及构建自定义绘图 创建自定义面板 创建自定义面板是一种比较常见的自定义控件开发子集,面板可以驻留一个或多个子元素,并且实现了特定的布局逻辑以恰当地安排子元素.常见的基本类型的面板:StackPanel.DockPanel.WrapPanel.Canvas,Grid,TabPanel,ToolBarPverflowPanel,VirtualizingPanel. 两步布局过程 每个面板都有相同的功能:负责改变子元素尺寸…
完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚集其他元素的复合控件(按钮变成图像按钮,列表变成图像列表) 控件模板:所有WPF控件都是无外观的,这意味着他们具有硬编码的功能,但是他们的外观是通过控件模板单独定义的.使用新的控件模板替代默认模板,可重新构建基本控件 数据模板:所有派生自ItemsControl的类都支持数据模板,通过数据模板可创建…
将元素绑定在一起 数据绑定最简单的形式是:源对象是WPF元素而且源属性是依赖项属性.依赖项属性内置了更改通知支持,当源对象中改变依赖项属性时,会立即更新目标对象的绑定属性. 元素绑定到元素也是经常使用的,可以使元素的交互自动化,而不必编写代码. 绑定表达式 Visibility="{Binding Path=IsChecked, ElementName=rdKer, Converter={StaticResource EqualVisibleConverter}, ConverterParame…
一.Expander的用法 在WPF中,Expander是一个很实用的复合控件,可以很方便的实现下拉菜单和导航栏等功能.先介绍简单的用法,而后分析他的控件模板. <Window.Resources> <ResourceDictionary> <Style x:Key="Expander.StackPanel.Style" TargetType="FrameworkElement"> <Setter Property=&quo…
多点触控输入 多点触控输入和传统的基于比的输入的区别是多点触控识别手势,用户可以移动多根手指以执行常见的操作,放大,旋转,拖动等. 多点触控的输入层次 WPF允许使用键盘和鼠标的高层次输入(例如单击和文本改变)和低层次输入(鼠标事件和按键事件).多点触控输入同样应用了这种多层次的输入方式,WPF提供了3个独立的层次: 原始触控(raw touch):这是最低级的支持,可访问用户执行的每个触控.缺点是由应用程序负责将单独的触控消息组合在一起,并对他们进行解释.如果不准备识别标准触摸手势,反而希望创…
所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构: 设置控件内容对齐方式 (HorizontalContentAlignment,VerticalContentAlignment,Padding) 设置Tab键顺序 (TabIndex,IsTabStop) 绘制背景,前景,边框 (Background,Foreground,BorderBrush,BorderThickness) 支持格式化文本内容的尺寸和字体 (FontFamily,Fo…
理解路由事件 当有意义的事情发生时,有对象(WPF的元素)发送的用于通知代码的消息,就是事件的核心思想.WPF通过事件路由的概念增强了.NET事件模型.事件由允许源自某个元素的事件由另一个元素引发.例如:使用路由事件,来自工具栏按钮的单击事件可在被代码处理前上传到工具栏,然后上传到包含工具栏的窗口. 事件路由为在最合适的位置编写紧凑的.组织良好的用于处理事件的代码提供了灵活性.要使用WPF内容模型,事件路由是必须的,内容模型允许使用许多不同的元素构建简单元素,并且这些元素都拥有自己独立的事件集合…
ScrollViewer控件 直接继承ContextControl类,提供了虚拟界面,允许用户围绕更大的元素滚动.只能包含单个元素(ContextControl决定),但可以放置布局控件来实现多个任意元素的放置. 默认是垂直滚动,也支持水平滚动功能(需要将HorizontalScrollBarVisibility改成Visible或者Auto).可以通过鼠标操作滚动或者代码来滚动内容: LineUp()和LineDown(),这两个方法向上和向下移动的效果相当于单击一次垂直滚动条两端的箭头按钮…
数据视图 数据视图是在后台工作的,用于协调绑定数据的集合.使用数据视图可以添加导航逻辑.实现数据过滤.排序.分组. 当将集合或者DataTable绑定到ItemsControl控件时,会不加通告地在后台创建数据视图(位于数据源和绑定的控件之间).数据视图是进入数据源的窗口,可以跟踪当前项,并且支持各种功能(排序.过滤.分组等).这些功能和数据对象本身是相互独立的,这意味着可以在窗口的不同部分使用不同的方式绑定相同的数据源.例如:可将同一产品集合绑定到两个不同的列表,并对产品进行过滤显示不同的记录…
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…
依赖项属性 定义依赖项属性 注意:只能为依赖对象(继承自DependencyObject的类)添加依赖项属性.WPF中的元素基本上都继承自DependencyObject类. 静态字段 名称约定(属性末尾加上Property) Readonly(只能在静态构造函数中进行设置) public static readonly DependencyProperty ScalingRatioProperty = DependencyProperty.Register("ScalingRatio"…
数据提供者 在大多数的代码中,都是通过设置元素的DataContext属性或者列表控件的ItemsSource属性,从而提供顶级的数据源.当数据对象是通过另一个类构造时,可以有其他选择. 一种是作为窗口的资源定义数据对象.如果能够使用声明的方式构造对象,这种方法工作的很好,但是如果需要在运行时使用数据库等方式获取数据,这种技术就没有意义了.但是会出现部分开发人员采用这种方法,基本思路是在构造函数中获取所需的数据. <Window.Resources>     <local:PhotoLi…
样式(style)是组织和重用格式化选项的重要工具.创建一系列封装某些细节的样式,然后通过属性来应用样式. 行为(behavior)是一款重用用户界面代码更有挑战性的工具.基本思想是:使用行为封装一些通用的UI功能.如果具有适当的行为,可使用一两行XAML标记将其附加到任何元素. 样式基础 样式就是可应用于元素的属性值集合.样式支持触发器,当属性发生变化时,可通过触发器改变控件的样式. 样式有5个重要属性: 属性 说明 Setters 设置属性值,自动关联事件处理程序的Setter对象或者Eve…
窗体 无边框 窗体无边框(最大化及标题位置)WindowStyle="None" 窗体透明 AllowsTransparency="True",必须设置窗体无边框,否则报错 SizeToContent属性,窗体大小可以根据内容自动调整,多语言版本时一般会使用 我习惯性的设置Window窗体的样式如下: <Border Margin="5" Background="#EEE" CornerRadius="5&qu…
资源集合 每个元素都有Resources属性,该属性存储了一个资源字典集合(它是ResourceDictionary类的实例).资源集合可以包含任意类型的对象,并根据字符串编写索引. 每个元素既可以访问自己的资源集合中的资源,也可以访问所有父元素 的资源集合中的资源,所以一般将资源集合放在窗口级别或者应用程序级别. 资源的引用分为动态.静态.静态资源在首次创建窗口时一次性地设置完毕.动态资源,如果发生了改变,就会重新应用资源.一般在下列情况下才需要使用动态资源属性: 资源具有依赖系统设置的属性(…
最近工作比较忙,未能及时更新内容,敬请了解!!! 对于可视化树的分析引出了几个有趣问题.例如,控件如何从逻辑树表示扩张成可视化树表示? 每个控件都有一个内置的方法,用于确定如何渲染控件(作为一组更基础的元素).该方法称为控件模板(control template),是用XAML标记块定义的. 下面是普通Button类的模板的简化版本.该版本省略了XML明朝空间声明.为嵌套的元素设置属性的特性,以及当按钮被禁用.取得焦点或单击时确定按钮行为的触发器: <ControlTemplate ...>…
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: ProcessBar自定义标准样式: ProcessBar自定义环形进度样式: 二.ProcessBar标准样式 效果图: ProcessBar的样式非常简单: <!--ProgressBar Style--> <Style TargetType="ProgressBar" x…
WPF教程十一:简单了解并使用控件模板 这一章梳理控件模板,每个WPF控件都设计成无外观的,但是行为设计上是不允许改变的,比如使用Button的控件时,按钮提供了能被点击的内容,那么自由的改变控件外观时,Button作为按钮的本质是没有改变的,同样响应的是按钮的逻辑.所以我们使用控件模板主要也是为了修改对应控件的显示内容,这个比样式资源和触发器可改变的内容更多,同时控件模板也能结合样式和触发器自定义更多的显示内容. 我平时写控件模板的时候,我喜欢打开Blend然后再Blend下通过鼠标直接生成对…
一直以来,我们设计windows应用程序,都是将控件的尺寸定好,无论窗体大小怎么变,都不会改变,这样的设计对于一般的应用程序来说是没有问题的,但是对于一些比较特殊的应用,比如有背景图片的,需要铺面整个屏幕,由于存在多种不同的分辨率,所以会出现布局混乱的情况.今天我们来看看WPF中如何让我们的控件也随着分辨率放大缩小.下面来写一个例子看看效果吧~  一.普通布局中的问题 这里我们写一个简单的页面,新建WPF项目,在MainWindow里面添加按钮,如下图: 这个页面很简单,只有三个按钮,我们想的是…
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.DataGrid自定义样式 DataGrid是常用的数据列表显示控件,先看看实现的效果(动态图,有点大): DataGrid控件样式结构包括以下几个部分: 列头header样式 调整列头宽度的列分割线样式 行样式 行头调整高度样式 行头部样式…
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单Menu的自定义样式: 右键菜单ContextMenu的自定义样式: 树控件TreeView的自定义样式,及右键菜单实现. 二.菜单Menu的自定义样式 自定义菜单样式的效果图: Menu和ContextMenu样式本身很简单,他们最主要的部分就是MenuItem,MenuItem中包含的内容比较多,…
引言:在进行WPF项目开发过程中,由于项目的需要,经常要对某个控件进行特殊的设定,其中就牵涉到模板的相关方面的内容.本文也是在自己进行项目开发过程中遇到控件模板设定时集中搜集资料后整理出来的,以供在以后的项目开发过程中查阅.WPF有控件模板和数据模板,从字面上来看,控件模板主要是用来改变控件的外观,数据模板则定义控件中数据的表现方式.下面让逐一进行介绍. 控件模板ControlTemplate,有两部分:VistualTree视觉树,即是能看到的外观:Trigger触发器,里面包括外部条件达到某…
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板)                                                                                                                        周银辉 WPF包含数据模板和控件模板,其中控件模板又包括Contro…