深入浅出WPF-笔记(2015.04.04)

Style是一组<Setter>,也就是一组属性设置器。

·使用Style时,如果Value的值比较简单,那就直接用Attribute值来表示,如果Value值不能用一个简单地字符串描述就需要使用XAML的属性对象语法。

ControlTemplate最终将被应用到一个控件上,称这个控件为模板目标控件或模板化控件(Templated Control),ControlTemplate里的控件可以使用TemplateBinding将自己的属性值关联在目标控件的某个属性上,必要的时候还可以田间Converter.

WPF的UI元素可以看作两棵树--LogicalTree和VisualTree,这两棵树的交点就是ControlTempalte。如果把界面上的控件元素看作是一个结点,那元素们构成的就是LogicalTree,如果把控件内部由ControlTemplate生成的控件也算上,那构成的就是VisualTree。换句话说,在LogicalTree上导航不会进入空间内部,而在VisualTree上导航则可检索到控件内部由ControlTemplate生成的子级控件。

ItemsControl具有一个名为ItemsPanel的属性,其数据类型为ItemsPanelTempalte。ListBox的内容横向显示示例如下:

<Window x:Class="MyTestWpfApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="RuntimePopup" Height="300" Width="300">
    <Grid Margin="6">
        <ListBox>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <TextBlock Text="Allan"/>
            <TextBlock Text="Kevin"/>
            <TextBlock Text="Drew"/>
            <TextBlock Text="Timothy"/>
        </ListBox>
    </Grid>
</Window>

凡是Template,最终都是要作用在控件上的,这个控件就是Tempalte的目标控件,也叫模板化控件(Templated Control)。

决定控件外观的是ControlTempalte,决定数据外观的是DataTemplate,它们正是Control类的Template和ContentTemplate两个属性的值。

时间: 2024-10-01 02:39:59

深入浅出WPF-笔记(2015.04.04)的相关文章

深入浅出WPF笔记

数据层(Database,Oracle等) 业务逻辑层(Service,Data Access Layer,WCF) 表示层(WPF,Win Form,ASP.net,Silverlight) [WPF开发方法论] AS-IS:UI事件驱动程序运行(Win Form)--TO-BE:数据驱动程序运行并显示在UI上(WPF) XAML:WPF技术中专门用于设计UI的语言. 逻辑树(logical tree):不考虑控件内部的组成结构,只观察由控件组成的"树". 可视元素树(visual

《深入浅出WPF》笔记——绘画与动画

<深入浅出WPF>笔记——绘画与动画 本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一下学习的过程.在本记录中,为了更好的理解绘画与动画,多数的例子还是在VS里面敲出来的.好了,不废话了,现在开始. 一.WPF绘画 1.1基本图形 在WPF中可以绘制矢量图,不会随窗口或图型的放大或缩小出现锯齿或变形,除此之外,XAML绘制出来的图有个好处就是便于修改,当图不符合要求的时间,通常改某些属性就可以完成

2015.11.04 学习 Ubuntu下安装gocode

2015.11.04 学习 Ubuntu下安装gocode 1.go get github.com/nsf/gocode,如果不成功 2.网页http://github.com/nsf/gocode,下载包,然后解压,解压后的文件名为gocode-master,修改为gocode. 3.复制gocode文件夹到go的安装目录~/go/github.com/nsf/gocode,(没有的话自行创建) 4.然后命令行执行go install github.com/nsf/gocode.确保安装目录的

【我的书】Unity Shader的书 — 目录(2015.09.04更新)

写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shader的艰难,在群里也见了很多人提出的问题.我觉得学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么好处呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader初学者,但要: 有一定的

《深入浅出WPF》 学习笔记

<深入浅出WPF> 序言 1. 什么是WPF    2. 为什么要学习WPF 第一章 XAML概览 1. XAML是什么? 2. XAML有哪些优点 第二章 从零起步认识XAML 1. 新建WPF项目 2. 剖析最简单的XAML代码 第三章 系统学习XAML语法 1. XAML文档的树形结构 2. XAML中为对象属性赋值的语法 2.1 使用标签的Attribute为对象属性赋值 2.2 使用TypeConverter 2.3 属性元素 2.4 标记扩展(Markup Extensions)

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

WPF笔记整理--DataBinding(2)

图片绑定时的一个问题.场景如下: 有2个窗口A和B,A窗口的业务逻辑是编辑生成图片.然后从A窗口可以打开B窗口.B窗口是由A生成所有图片的列表.当在A窗口编辑生成图片并保存后打开B窗口就会看到刚刚生成的图片.关闭B窗口,可以在A窗口中继续编辑图片,再次保存图片并打开B窗口,就会看到最新的图片的变化.图片是保存在本地路径. 解决方案:定义一个Converter,将图片读到MemoryStream中,然后再Binding.代码如下: public object Convert(object valu

WPF笔记整理--DataBinding(1)

WPF的数据绑定是一大亮点.如果用WPF而不用数据绑定,那就太失败了. 也不多废话,如果不知道如何绑定,请百度一下.这里简单的提几点: 1. ObservableCollection可用于集合绑定,由于已经实现了INotifyPropertyChanged,可以通过添加删除集合中的元素来实现对UI列表项更新.注意,当一个ObservableCollection已经有元素,通过再次new集合并不能实现清空页面已显示的内容. 如果希望ObservableCollection中某列表项的属性值改变显示

Struts2.X深入浅出 学习笔记

第一节.MVC以及Struts2简介 第二节.Action生命周期以及接收表单数据 第三节.Struts2配置以及Struts.xml详解 Struts2 主要配置文件 ? 1 2 3 4 5 Web.xml 设置过滤器以及annotation初始化参数 Struts.xml 主配置文件 Struts.properties 默认属性文件 Struts-default.xml 默认配置文件 Struts-plugin.xml 插件配置文件 Struts2 主要配置加载次序 ? 1 2 3 4 5

WPF笔记(2.9和2.10)——Layout

原文:WPF笔记(2.9和2.10)--Layout 2.9讲的是,如果内部设定超过容器大小,怎么办?StackPanel会裁剪越界部分DockPanel和Grid会智能判断,从而决定换行. 2.10 自定义布局容器自定义容器要实现两个方法MeasureOverride和ArrangeOverride,并保证遍历其下的所有子控件,使他们都执行Measure和Arrange方法. using System;using System.Windows.Controls;using System.Win