zoukankan      html  css  js  c++  java
  • WPF快速指导7:控件和自定义控件

    WPF快速指导7:控件和自定义控件

    本文摘要:

    1:控件和自定义控件的概念;

    2:更改控件的外观;

    3:自定义控件的设计原则;

    1:控件和自定义控件的概念

        Windows Presentation Foundation (WPF) 附带了许多几乎在所有 Windows 应用程序中都会使用的常见 UI 组件,如 ButtonLabelTextBoxMenuListBox。以前,这些对象被称为控件。现在,WPF SDK 继续使用术语“控件”泛指任何代表应用程序中可见对象的类。请注意,类不必从 Control 类继承即可具有可见外观。从 Control 类继承的类包含一个 ControlTemplate,允许控件的使用方在无需创建新子类的情况下根本改变控件的外观。

        那么,什么是自定义控件。从第一段的描述中其实已经看到,自定义控件包含两类。一类是集成Control来实现,一类是仅仅通过定义ControlTemplate即可。

    2:更改控件的外观

        通过执行以下操作之一来更改控件的外观:

    3:自定义控件的设计原则

         通过丰富内容模型、样式、模板和触发器,最大程度地减少了创建新控件的需要。但是,如果确实需要创建新控件,那么理解 WPF 中的不同控件创作模型就显得非常重要。WPF 提供三个用于创建控件的一般模型,每个模型都提供不同的功能集和灵活度。这三个模型的基类分别为 UserControlControlFrameworkElement

    从 UserControl 派生

         在 WPF 中创建控件的最简单方法是从 UserControl 派生。如果生成继承自 UserControl 的控件,需要将现有组件添加到 UserControl,命名这些组件,然后在 可扩展应用程序标记语言 (XAML) 中引用事件处理程序。执行这些操作之后,即可在代码中引用这些命名元素和定义事件处理程序。此开发模型与用于 WPF 应用程序开发的模型非常相似。

    如果生成正确,UserControl 可以利用丰富内容、样式和触发器的优点。但是,如果控件继承自 UserControl,则使用该控件的用户将无法使用 DataTemplateControlTemplate 来自定义其外观。因此,有必要从 Control 类或其派生类(UserControl 除外)进行派生,以便创建支持模板的自定义控件。

    从 UserControl 派生的优点

         如果符合以下所有情况,请考虑从 UserControl 派生:

    • 希望以类似于生成应用程序的方式生成控件。

    • 控件仅由现有组件组成。

    • 不需要支持复杂自定义项。

    从 Control 派生

         从 Control 类派生是大多数现有 WPF 控件使用的模型。在创建继承自 Control 类的控件时,可使用模板定义其外观。通过这种方式,可以将运算逻辑从可视化表示形式中分离出来。这样还可以确保使用命令和绑定而非事件来分离 UI 和逻辑,并在可能时避免引用 ControlTemplate 中的元素。  如果将控件的 UI 和逻辑正确分离,则控件的用户可以重定义该控件的 ControlTemplate 以自定义其外观。 尽管构建自定义 Control 不像构建 UserControl 那样容易,但是自定义 Control 可提供最大的灵活性。

    从 Control 派生的优点

         如果符合以下任一情况,请考虑从 Control 派生,而不要使用 UserControl 类:

    • 希望控件外观能通过 ControlTemplate 进行自定义。

    • 希望控件支持不同的主题。

    从 FrameworkElement 派生

         从 UserControlControl 派生的控件依赖于组合现有元素。很多情况下,这是一种可接受的解决方案,因为从 FrameworkElement 继承的任何对象都可以位于 ControlTemplate 中。但是,某些时候,简单的元素组合不能满足控件的外观需要。对于这些情况,使组件基于 FrameworkElement 才是正确的选择。

    生成基于 FrameworkElement 的组件有两种标准方法:直接呈现和自定义元素组合。直接呈现涉及的操作包括:重写 FrameworkElementOnRender 方法,并提供显式定义组件视觉效果的 DrawingContext 操作。此方法由 ImageBorder 使用。自定义元素组合涉及的操作包括使用 Visual 类型的对象组合组件的外观。有关示例,请参见使用 DrawingVisual 对象Track 是 WPF 中使用自定义元素组合的控件示例。在同一控件中,也可以混合使用直接呈现和自定义元素组合。

    从 FrameworkElement 派生的优点

         如果符合以下任一情况,请考虑从 FrameworkElement 派生:

    • 希望对控件的外观进行精确控制,而不仅仅是简单的元素组合提供的效果。

    • 想要通过定义自己的呈现逻辑来定义控件的外观。

    • 想要以一种 UserControlControl 之外的新颖方式组合现有元素。

    NET C# 入门级 .NET C# 专业级 .NET 架构级 BS系统专业级 BS系统安全
    1.开篇及C#程序、解决方案的结构
    2.源码管理之TFS入门
    3.打老鼠初级
    ……
    21.CMS之主要功能实现
    22.进程和线程基础
    23.类型转换
    24.算法基础
    25.初级课程之剩余知识点
    1.消灭打老鼠游戏中的自定义委托
    2.垃圾回收
    3.Dispose模式
    ……
    16.异常使用指导
    17.最常用的重构指导
    18.Debug和IDE的进阶
    19.Resharper的使用
    20.ILSPY的使用
    1.Socket入门
    2.打造打老鼠游戏网络版
    3.WCF入门
    ……
    10.依赖注入
    11.万物兼可测试
    12.软件指标之覆盖率计算
    13.软件指标之代码行
    14.软件指标之圈复杂度、嵌套深度
    1.HTML
    2.WebForm原理
    3.CSS必知必会
    ……
    19.让浏览器缓存Shop
    20.Asp.net的生命周期
    21.Asp.net网站的发布以及调试晋级
    22.BS程序的本质
    23.压力测试我们的Shop
    1.Fiddler必知必会
    2.IE开发者工具必知必会
    3.跨站脚本防范
    4.权限欺骗防范
    5.参数越界防范
    6.会话劫持防范
    7.CSRF防范
    8.盗链防范
    9.静态文件的保护


     
     
    Creative Commons License本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
  • 相关阅读:
    [野狐行网游研究][二期][8.21更新]
    Movidius的深度学习入门
    Linux下深度学习常用工具的安装
    Intel AI Cloud 使用
    【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
    策略模式
    Java 8 中常用的函数式接口
    MySQL权限管理(五)
    kickstart无人值守安装
    pymysql模块使用
  • 原文地址:https://www.cnblogs.com/luminji/p/1839196.html
Copyright © 2011-2022 走看看