silverlight中自作GroupBox控件理解依赖属性
下面是在Silverlight中制作一个GroupBox控件,同时讲解了依赖属性:
(一)何时应实现依赖项属性
(1):希望可在样式中设置此属性
(2):望此属性支持数据绑定
(3):希望此属性支持经过动画处理的值
(4):希望 Silverlight 属性系统在属性系统本身、环境或用户执行的操作或者读取并使用样式而更改了属性以前的值时进行报告
(二)属性更改回调:属性系统已经确定发生了有效的属性值更改。由于此方法是静态的,因此回调的 d 参数很重要,因为它通知您类的哪个实例已报告了更改
(三)集合类型依赖项属性
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
//TemplateBinding:将控件模板中的属性的值链接到在模板化控件上公开的某个其他属性的值,TemplateBinding 仅可用在 XAML 的 ControlTemplate 定义内。
//ContentPresenter,以标记要将内容添加到的位置。ContentPresenter 应使用模板绑定以将 ContentControl.Content 属性与 ContentPresenter.Content 属性相关联
//(一)何时应实现依赖项属性
// (1):希望可在样式中设置此属性
// (2):望此属性支持数据绑定
// (3):希望此属性支持经过动画处理的值
// (4):希望 Silverlight 属性系统在属性系统本身、环境或用户执行的操作或者读取并使用样式而更改了属性以前的值时进行报告
//(二)属性更改回调:属性系统已经确定发生了有效的属性值更改。由于此方法是静态的,因此回调的 d 参数很重要,因为它通知您类的哪个实例已报告了更改
//(三)集合类型依赖项属性
namespace GroupBox
{
public class GroupBox :ContentControl
{
public GroupBox()
{
this.DefaultStyleKey = typeof(GroupBox);
}
//TitleProperty---依赖项属性标识符:一个DependencyProperty实例
//(1)对于 Silverlight核心API中的现有依赖项属性,此实例通常公开为一个 public static readonly 字段,作为该依赖项属性所属同一 DependencyObject 类型的成员
//(2)对于自定义依赖项属性,此字段是在注册依赖项属性时作为返回值获取的
//Title----依赖项属性
//(1)若要成为绑定目标,属性必须是依赖项属性
//(2)样式和模板是将属性定义为依赖项属性的两个主要激发方案
//(3)若要进行动画处理,动画的目标属性必须是依赖项属性.若要进行动画处理,目标属性的值类型必须受现有的一个 Timeline 派生动画类型支持
//(4)赖项属性可以有一个默认值,该默认值定义为其属性元数据的一部分.若要再次将该值重置为默认值,请对属性调用 ClearValue
//(5)依赖项属性值优先级,Silverlight 属性系统会优先使用局部值
//(6)Property-Changed 行为:维护某个属性的有效值(另一个属性可以影响该属性的值)
public static readonly DependencyProperty TitleProperty = DependencyProperty.Register
("Title", typeof(string), typeof(GroupBox),null);
//CLR包装
public string 标题
{
get { return (string)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
//TemplateBinding:将控件模板中的属性的值链接到在模板化控件上公开的某个其他属性的值,TemplateBinding 仅可用在 XAML 的 ControlTemplate 定义内。
//ContentPresenter,以标记要将内容添加到的位置。ContentPresenter 应使用模板绑定以将 ContentControl.Content 属性与 ContentPresenter.Content 属性相关联
//(一)何时应实现依赖项属性
// (1):希望可在样式中设置此属性
// (2):望此属性支持数据绑定
// (3):希望此属性支持经过动画处理的值
// (4):希望 Silverlight 属性系统在属性系统本身、环境或用户执行的操作或者读取并使用样式而更改了属性以前的值时进行报告
//(二)属性更改回调:属性系统已经确定发生了有效的属性值更改。由于此方法是静态的,因此回调的 d 参数很重要,因为它通知您类的哪个实例已报告了更改
//(三)集合类型依赖项属性
namespace GroupBox
{
public class GroupBox :ContentControl
{
public GroupBox()
{
this.DefaultStyleKey = typeof(GroupBox);
}
//TitleProperty---依赖项属性标识符:一个DependencyProperty实例
//(1)对于 Silverlight核心API中的现有依赖项属性,此实例通常公开为一个 public static readonly 字段,作为该依赖项属性所属同一 DependencyObject 类型的成员
//(2)对于自定义依赖项属性,此字段是在注册依赖项属性时作为返回值获取的
//Title----依赖项属性
//(1)若要成为绑定目标,属性必须是依赖项属性
//(2)样式和模板是将属性定义为依赖项属性的两个主要激发方案
//(3)若要进行动画处理,动画的目标属性必须是依赖项属性.若要进行动画处理,目标属性的值类型必须受现有的一个 Timeline 派生动画类型支持
//(4)赖项属性可以有一个默认值,该默认值定义为其属性元数据的一部分.若要再次将该值重置为默认值,请对属性调用 ClearValue
//(5)依赖项属性值优先级,Silverlight 属性系统会优先使用局部值
//(6)Property-Changed 行为:维护某个属性的有效值(另一个属性可以影响该属性的值)
public static readonly DependencyProperty TitleProperty = DependencyProperty.Register
("Title", typeof(string), typeof(GroupBox),null);
//CLR包装
public string 标题
{
get { return (string)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
}
}
参考文章
http://programmerpayback.com/2008/11/26/silverlight-groupbox-control/