原文:《Programming WPF》翻译 第9章 1.自定义控件基础

在写一个自定义控件之前,你需要问的第一个问题是,我真的需要一个自定义控件吗?一个写自定义控件的主要原因是为了用户界面技术专家可以修改控件的外观,但是正如我们在前些章看到的,内容模型和模板意味着这通常是不必要的。WPF提供了一个先进的按照规模的定制技术,你应该记住这些——当考虑写一个自定义控件时。

  1. 使用属性修改一个已有控件的外观

  2. 组合已有的一些控件
  3. 将内容嵌入已有控件
  4. 使用模板代替一个已有控件
  5. 创建一个自定义控件或其他自定义元素

这个顺序提供了渐增的能力级别,以每一级别上轻微的额外成效为交换。在这些简单的情形中,你可以通过设置属性来调整一个内嵌控件的行为和外观以满足你对的需求。下一步是将控件编译在一起,形成一个更强大的整体。你可以通过将内容嵌入另一个控件的方式,把这个合成物带入到下一步骤。你可以使用一个模板完全替换外观,正如第5章所描述的。一旦技术1-4都没有满足你的需求,编写一个自定义的元素就像自定义控件,看上去像是一个答案。

是否需要写一个新的可视化元素类型,一个重要的指示是,你是否计划添加一个新的API特性。即使在这种情形,你应该仔细的考虑要写哪一种自定义元素类型,控件并不是唯一的元素种类。通过写一个底层的组件,并集成到已知控件中的外观中,你可以得到更多的弹性。例如,大量的使WPF弹性化的元素,如布局类和Shapes,派生于FrameworkElement,实际上并不是控件——它们不是从Control基类派生的。

如果你确定一个自定义元素使最好的进行办法,你需要做完大量的设计步骤。首先,你必须挑选出基类。它会派生自FrameworkElement,Control,或WPF提供的其它基类型之一么?然后你必须定义API,决定你的组件哪个属性,事件和命令。最后,如果你的新元素提供了与内嵌组件相同的弹性,你需要注意元素和其模板间的接口。

《Programming WPF》翻译 第9章 1.自定义控件基础的更多相关文章

  1. 《Programming WPF》翻译 第8章 1.动画基础

    原文:<Programming WPF>翻译 第8章 1.动画基础 动画包括在一段时间内改变用户界面的某些可见的特征,如它的大小.位置或颜色.你可以做到这一点,非常困难的通过创建一个tim ...

  2. 《Programming WPF》翻译 第7章 1.图形基础

    原文:<Programming WPF>翻译 第7章 1.图形基础 WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力.这有很多图形构架的方面来达到这个目标.其中最重要 ...

  3. 《Programming WPF》翻译 第9章 5.默认可视化

    原文:<Programming WPF>翻译 第9章 5.默认可视化 虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化.这个控件应该正好工作 ...

  4. 《Programming WPF》翻译 第9章 6.我们进行到哪里了?

    原文:<Programming WPF>翻译 第9章 6.我们进行到哪里了? 只有当任何内嵌控件都没有提供你需要的底层行为时,你将要写一个自定义控件.当你写一个自定义控件,你将要使用到依赖 ...

  5. 《Programming WPF》翻译 第9章 4.模板

    原文:<Programming WPF>翻译 第9章 4.模板 对一个自定义元素最后的设计考虑是,它是如何连接其可视化的.如果一个元素直接从FrameworkElement中派生,这将会适 ...

  6. 《Programming WPF》翻译 第9章 3.自定义功能

    原文:<Programming WPF>翻译 第9章 3.自定义功能 一旦你挑选好一个基类,你将要为你的控件设计一个API.大部分WPF元素提供属性暴露了多数功能,事件,命令,因为他们从框 ...

  7. 《Programming WPF》翻译 第9章 2.选择一个基类

    原文:<Programming WPF>翻译 第9章 2.选择一个基类 WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生.图9-1显示了一组可能作为类--可能是合适的基类, ...

  8. 《Programming WPF》翻译 第6章 1.创建和使用资源

    原文:<Programming WPF>翻译 第6章 1.创建和使用资源 资源这个词具有非常广泛的意义.任何对象都可以是一个资源.一个在用户界面中经常使用的Brush或者Color可以是一 ...

  9. 《Programming WPF》翻译 第3章 1.什么是控件

    原文:<Programming WPF>翻译 第3章 1.什么是控件 对于一个应用程序而言,控件是搭建用户界面的积木.它们具备交互式的特征,例如文本框.按钮以及列表框.尽管如此,WPF还有 ...

随机推荐

  1. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

  2. coalesce和nvl函数

    coalesce 函数 : Oracle COALESCE函数语法为COALESCE(表达式1,表达式2,...,表达式n),n>=2,此表达式的功能为返回第一个不为空的表达式,如果 都为空则返 ...

  3. struct2(六) 为表单添加验证

    简介 为表单添加验证 添加校验的方法: 1. first name 不能为null 2. Email address 不能为null 3. age 必须大于18岁 为了在用户提交的时候,能够校验这个表 ...

  4. c语言typedef运用之结构体

    #include <stdio.h> #include <stdlib.h> typedef struct stu { ]; int score; }stu_info; int ...

  5. Java并发实现一(并发的实现之Thread和Runnable的区别)

    package com.subject01; public class ThreadOrRunnable { public static void main(String[] args) { Syst ...

  6. Annotation(二)——Hibernate中注解的开发

    在利用注解开发数据库持久层以前,需要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范.就类似于JDBC,Servlet,JSP等规范一样.而Hi ...

  7. 用java流方式判断文件类型

    这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...

  8. yaml 1.6 操作

    /** * Copyright (c) 2008, http://www.snakeyaml.org * * Licensed under the Apache License, Version 2. ...

  9. curl 学习

    <?php // $username =13800138000; // $password =123456; // $sendto =13912345678; // $message = &qu ...

  10. Android : 如何在WebView显示的页面中查找内容

    Android : 如何在WebView显示的页面中查找内容 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo WebView是A ...