zoukankan      html  css  js  c++  java
  • 控件自定义

    控件自定义


    http://msdn.microsoft.com/zh-cn/library/ms752043.aspx


    WPF 提供三个用于创建控件的一般模型,每个模型都提供不同的功能集和灵活度。 这三个模型的基类分别为UserControlControlFrameworkElement


    如果控件继承自 UserControl,则使用该控件的用户将无法使用DataTemplateControlTemplate 来自定义其外观。

    如果符合以下任一情况,请考虑从 Control 派生,而不要使用UserControl 类: 希望控件外观能通过ControlTemplate 进行自定义。 希望控件支持不同的主题。

    UserControlControl 派生的控件依赖于组合现有元素。 但是,某些时候,简单的元素组合不能满足控件的外观需要。 对于这些情况,使组件基于 FrameworkElement 才是正确的选择。


    当属性为依赖项属性时,可以进行下面的操作:
    • 在样式中设置该属性。

    • 将该属性绑定到数据源。

    • 使用动态资源作为该属性的值。

    • 动画处理该属性。    

    下面的示例通过执行以下操作定义一个名为 Value 的依赖项属性:

    将一个名为 ValuePropertyDependencyProperty 标识符定义为 publicstaticreadonly 字段。

    通过调用 DependencyProperty.Register 向属性系统注册该属性名

    通过实现该属性的 getset 访问器定义一个名为 Value(即用来注册该依赖项属性的名称)的 CLR 包装属性。getset 访问器只是分别调用 GetValueSetValue

    CoerceValueCallback 定义一个名为 CoerceValue 的方法。

    PropertyChangedCallback 定义一个名为 OnValueChanged 的方法。 


    路由事件支持以下行为:

    事件可以在多个控件的父级上进行处理。

    路由事件可在 EventSetter 中使用,应用程序开发人员通过 EventSetter 可以在样式内指定事件的处理程序。

    路由事件可在 EventTrigger 中使用,这对于使用 XAML 对属性进行动画处理很有用。

    通过执行以下操作定义了一个路由事件:              

    将一个名为 ValueChangedEventRoutedEvent 标识符定义为 publicstaticreadonly 字段。

    通过调用 EventManager.RegisterRoutedEvent 方法注册该路由事件。

    声明一个名为 ValueChanged 的公共事件,并包含事件访问器声明.该示例调用 add 访问器声明中的 AddHandlerremove 访问器声明中的 RemoveHandler 来使用 WPF 事件服务。                

    创建一个名为 OnValueChanged 的受保护的虚方法,该方法引发 ValueChanged 事件。                  


    应按照以下原则在自定义控件上实现附加属性:

    具有一个使用 RegisterAttached 方法创建的 publicstaticreadonlyDependencyProperty,其形式为“属性名称Property”。

    实现一对名为 Set属性名称 Get属性名称public static CLR 方法。 这两种方法都应接受从 DependencyProperty 派生的类作为其第一个参数。 

    Set 属性名称Get属性名称 必须分别直接路由到目标依赖项对象的 GetValueSetValue 方法。




  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/james1207/p/3343562.html
Copyright © 2011-2022 走看看