public interface ICommand {
event EventHandler CanExecuteChanged;
bool CanExecute(object parameter);
void Execute(object parameter);
}
visual、 uielement、 frameworkelement、 control
MEF(MEF基础、传送门、MEF是一个IOC容器,可实现.net程序插件化开发)
引用传递 ref out,ref和out都可传出参数,out参数可为空,且在函数中必须赋值
线程同步、异步、Task
消息机制、消息泵
abstract、virtual、new、override、sealed
PRISM,CAL & CAG等等框架,是否使用过?你们是怎么用的?没有使用的话,解释一下自己的开发模式和框架。
WPF 3D和动画的应用(是否使用过?用过哪些?)。
怎么开发自定义控件?可以简单介绍一下自己开发的控件。
WPF的性能调整(你是怎么优化WPF性能的?)
聊聊你做WPF的一些经验和体会。
一· WPF由哪两部分组成?
wpf 由两个主要部分组成:引擎和编程框架。
1 引擎。wpf引擎是基于窗体的应用程序图形视频音频和文档提供了一个单一的运行时库。重要的是WPF基于矢量的呈现引擎使应用程序可以灵活地利用高DPI监视器,支持图形的硬件加速。
2 框架。WPF框架为媒体用户界面设计和文档提供大量的解决方案。wpf的设计考虑了可扩展性,使开发人员可以完全在WPF引擎的基础上创建自己的控件,也可以通过对现有WPF控件进行再分类来创建自己的控件。
四·如何理解WPF体系结构?
WPF使用多层架构,类似于三层结构,最顶层部分为托管代码API,此层用于为开发人员编写WPF应用程序提供较高层次的服务,基于C#托管代码编写。转换.NET代码到DirectX的工作由中间层milcore.dll实现。中间层milcore是用非托管代码实现,因为它需要与DirectX紧密集成,对性能敏感,就是消耗的资源比较多,对性能影响较大。
五· 在WPF中Binding的作用及实现语法?
典型的Binding具有四个重要组成部分:Binding目标对象(binding target object)目标对象属性(target property)Binding数据源(binding source)Path(用于指明要从数据源中取得的值,就是我们通常写的属性名称)。
二· 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。
七 ResourceDictionary
提供包含元素和WPF 应用程序的其他元素使用的WPF 资源的一个哈希表/字典实现。
有利于项目中资源共享。