首页 / 软件开发 / Silverlight / WPF and Silverlight学习笔记(十三):依赖项属性和路由事件
WPF and Silverlight学习笔记(十三):依赖项属性和路由事件2010-12-17 博客园 龙腾于海一、依赖项属性(Dependency Property)Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能。这些服务通常统称为 WPF 属性系统。由 WPF 属性系统支持 的属性称为依赖项属性。本概述介绍 WPF 属性系统以及依赖项属性的功能,这 包括如何在可扩展应用程序标记语言 (XAML) 中和代码中使用现有的依赖项属性 。依赖项属性的用途在于提供一种方法来基于其他输入的值计算属性值 。这些其他输入可以包括系统属性(如主题和用户首选项)、实时属性确定机制 (如数据绑定和动画/演示图板)、重用模板(如资源和样式)或者通过与元素 树中其他元素的父子关系来公开的值。另外,可以通过实现依赖项属性来提供独 立验证、默认值、监视其他属性的更改的回调以及可以基于可能的运行时信息来 强制指定属性值的系统。派生类还可以通过重写依赖项属性元数据(而不是重写 现有属性的实际实现或者创建新属性)来更改现有属性的某些具体特征。1、依赖项属性与CLR 包装属性以Button的Backgroud为例,设置 或获取其值可以有以下几种方式:XAML文件中1: <StackPanel>
2: <!--
3: 在所生成的代 码中,XAML加载器将 XAML 属性的简单字符串值的
4: 类型转 换为 WPF 类型(一种 Color,通过 SolidColorBrush)。
5: -->
6: <Button Margin="3" Background="Yellow" Content="Button A" />
7:
8: <!--
9: 使用嵌套元素的方式,设置 Button.Backgroud的值
10: -->
11: <Button Margin="3" Content="Button B" x:Name="btn_ButtonB">
12: <Button.Background>
13: <SolidColorBrush Color="Gold" />
14: </Button.Background>
15: </Button>
16:
17: <!--预留给代码使用的控件-->
18: <Button Margin="3" Content="Button C" x:Name="btn_ButtonC" />
19: <Button Margin="3" Content="Button D" x:Name="btn_ButtonD" />
20: <TextBox Margin="3" x:Name="txt_Value1" />
21: <TextBox Margin="3" x:Name="txt_Value2" />
22: </StackPanel>
代码文件中:1: // 通过包装的属性设置按钮的背景颜色
2: btn_ButtonC.Background = new SolidColorBrush(Colors.Red);
3:
4: // 通过依赖性属性的SetValue设置按钮的背景颜色
5: SolidColorBrush brush = new SolidColorBrush(Colors.Blue);
6: btn_ButtonD.SetValue(
7: Button.BackgroundProperty, brush);
8:
9: // 通过包装的属性获取ButtonB的背景颜色
10: SolidColorBrush b_Brush1 = (SolidColorBrush) (btn_ButtonB.Background);
11: txt_Value1.Text = b_Brush1.Color.ToString();
12:
13: // 通过依赖性属性的 GetValue获取ButtonB的背景颜色
14: SolidColorBrush b_Brush2 = (SolidColorBrush) (btn_ButtonB.GetValue(
15: Button.BackgroundProperty));
16: txt_Value2.Text = b_Brush2.Color.ToString();
如果使用的是现有属性,则上述操 作通常不是必需的(使用包装会更方便,并能够更好地向开发人员工具公开属性 )。但是在某些情况下适合直接调用 API。