一 · WPF中什么是样式?

首先明白WPF中样式属于资源中重要的一种。

同时样式也是属性值的集合,能被应用到一个合适的元素中,或者说能将一组属性应用到多个元素。

WPF中样式可以设置任何依赖属性。

WPF中样式也支持触发器,通过属性的改变,触发一组活动,包括改变某个控件的样式。

WPF中元素只能使用一个样式。

样式有继承的特性,样式可以继承样式。

二 · WPF中什么是模板 ?

WPF中模板是用于定义或重定义控件结构,或者说对象的外观。

WPF中模板有两类,一个是控件模板(ControlTemplate) 另一个是数据模板(DataTemplate),它们都派生自FrameworkTemplate抽象类。

总共有三大模板 ControlTemplate,ItemsPanelTemplate,DataTemplate。

1 ControlTemplate 主要用途是更改控件的外观。它有两个重要属性:VisualTree(视觉树)内容属性和Triggers触发器,对于触发器可以不用过多考虑,触发器可有可无。VisualTree就是呈现我们所画的控件。Triggers可以对我们的视觉树上的元素进行一些变化。

2 ItemsPanelTemplate 是个特殊的空间模板,主要用来标明多条目控件如何显示它所包含的多项数据。也可以说是指定用于项的额布局的面板。多用于多个内容控件的目标。多为Panel属性或者Panel结尾的属性。

3 DataTemplate 主要用于数据的呈现。也被称为显示绑定数据对象的模板。

三 · 绑定(Binding )的基础用法

WPF 里分三种:Binding,PriorityBinding,MultiBinding,这三种Binding的基类都是BindingBase,而BindingBase又继承于MarkupExtension。

常见的使用Binding方法是:

1 针对于继承于FrameworkElement控件。 SetBinding(DependencyProperty dp,String path),SetBinding(DependencyProperty dp,BindingBase binding),其中FrameworkElement中SetBinding只对DependencyProperty有效。

2 另一种是 BindingOperations.SetBinding(currentFolder,TextBlock.TextProperty,binding);

BindingOperations.SetBinding的原型是

public static BindingExpressionBase SetBinding(DependencyObject target,DependencyProperty dp,BindingBase binding)

3 清除Binding:

BindingOperations.ClearBinding(currentFolder,TextBlock.TextProperty);//删除currentFolder上的TextBlock.TextProperty绑定

BindingOperations.ClearAllBindings(currentFolder);//删除currentFolder上的所有绑定。

直接对Dependency Property赋值也可以解除binding,不过只对单向binding有效。

四 · 解释这几个类的作用及关系: Visual, UIElement, FrameworkElement, Control 。

它们四个的关系:从System.Windows.Controls命名空间中看,依次的继承关系是:

Visual继承UIElement,UIElement继承FrameworkElement,FrameworkElement继承Control。

1 Visual主要作用是为WPF提供2D呈现支持,主要包括输出显示,坐标转换,区域剪切等。

2 UIElement的主要作用是构建WPF元素和基本呈现特征的基类。例如其中定义很多与输入和焦点有关的特性,例如键盘事件,鼠标,还有一些与WPF事件模型有关的API。

3 FrameworkElement的主要作用是为定义的WPF元素添加一些功能。例如,布局定义 逻辑树 对象生命周期事件  支持数据绑定和动态资源引用 支持样式和动画。

4 Control的主要作用是为自定义应用程序控件提供基础。因为它是创建自定义应用程序控件的基类,作用就是可以重写Control类所提供的属性,方法,事件等,为自定义控件添加自定义逻辑。构建WPF应用程序页面的Window类也派生自它。

五 视觉树 VS 逻辑树?

1 逻辑树是视觉树的子集,也就是视觉树基本上是逻辑树的一种扩展。

2  WPF通过逻辑树来解决依赖项属性继承和资源的问题,使用视觉树来处理渲染,事件路由,资源定位等问题。

3  逻辑树可以认为是XAML所见的,而视觉树包含了XAML元素内部的结构。

4  逻辑树的查找可以通过LogicalTreeHelper辅助类,视觉树的查找可以通过VisualTreeHelper辅助类,其中需要注意的是对ContentElement元素的查找,无法直接通过VisualTreeHelper进行查找,ContentElement元素并不继承Visual,而ContentElement元素的使用时需要一个ContentElement载体FrameworkContentElement。

六  属性变更通知(INotifyPropertyChanged 和 ObservableCollection<T>)

1 INotifyPropertyChanged向客户端发出某一属性值更改的通知。

2  ObservableCollection<T>类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知

七  ResourceDictionary

提供包含元素和 WPF 应用程序的其他元素使用的 WPF 资源的一个哈希表/字典实现。

有利于项目中资源共享。

WPF 面试题及答案(二)的更多相关文章

  1. WPF 面试题及答案(三)

    一 · 路由事件的三种方式/策略(冒泡 直接 隧道) WPF中的路由事件是沿着VisualTree传递的,作用是用来调用应用程序的元素树上的各种监听器上的处理程序. (1)冒泡,这种事件处理方式是从源 ...

  2. JAVA面试题和答案(二)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  3. 2009年3月新浪PHP面试题及答案(二)

    1.请写出PHP5权限控制修饰符. 答案:private protected public. 2.对于大流量的网站,您采用什么样的方法来解决访问量问题? 答案:首先,确认服务器硬件是否足够支持当前的流 ...

  4. 近5年常考Java面试题及答案整理(二)

    上一篇:近5年常考Java面试题及答案整理(一) 31.String s = new String("xyz");创建了几个字符串对象? 答:两个对象,一个是静态区的"x ...

  5. 最常见的Java面试题及答案汇总(二)

    上一篇:最常见的Java面试题及答案汇总(一) 容器 18. java 容器都有哪些? 常用容器的图录: 19. Collection 和 Collections 有什么区别? java.util.C ...

  6. Android 面试题及答案(2)

    1.Activity相关.launchmode,OnSaveInstnceState,生命周期等. 4种默认的launchmode,以及OnNewIntent的回调. OnNewIntent-> ...

  7. Linux面试题汇总答案

    转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的 ...

  8. 经典71道Android试题及答案

    本文为开发者奉献了70道经典Android面试题加答案--重要知识点几乎都涉及到了,你还等啥,赶紧收藏吧!! 1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放 ...

  9. JSP面试题及答案

    更新时间:2015-04-07         来源:网络         投诉删除 [看准网(Kanzhun.com)]JSP面试题频道小编搜集的范文“JSP面试题及答案”,供大家阅读参考,查看更多 ...

随机推荐

  1. 使用webdriver + phantomjs + pdfkit 生成PDF文件

    实例 #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on Dec 6, 2013 @author: Jay <smile665@gm ...

  2. 推荐给开发者的20个优秀PHP框架

    推荐给开发者的20个优秀PHP框架 来源:developerslane   时间:2015-01-13 19:48:06   阅读数:111916 分享到:14 [导读] PHP是非常受欢迎并且很有影 ...

  3. 批量清除BOM头

    批量清除BOM头 (2012-03-05 13:28:30) 转载▼ 标签: 杂谈   有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题.以下是批量清除bom头的代码,复制代码, ...

  4. PHP学习(二)----数组

    数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;v ...

  5. img base64

    <?php header('Content-type:text/html;charset=utf-8'); //读取图片文件,转换成base64编码格式 $image_file = './429 ...

  6. Windows Registry

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms724871(v=vs.85).aspx https://msdn.microso ...

  7. 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html

    微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...

  8. nrf51822裸机教程-GPIO

    首先看看一下相关的寄存器说明 Out寄存器 输出设置寄存器 每个比特按顺序对应每个引脚,bit0对应的就是 引脚0 该寄存器用来设置 引脚作为输出的时候的 输出电平为高还是低. 与输出设置相关的 还有 ...

  9. Redis学习笔记(8)-发布/订阅

    package cn.com; import java.util.List; import redis.clients.jedis.Jedis; public class Redis_PubSub { ...

  10. 1058 N的阶乘的长度

    1058 N的阶乘的长度 基准时间限制:1 秒 空间限制:131072 KB 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= ...