WPF的Attached属性——出自《IT168》

本篇,我们再继续看一种特殊的 Dependency 属性: Attached 属性。 Attached 属性可以非常高效地 Attach 到其他的对象中。
我们仍然用前面的一个简单 XAML 代码为例:

    现在,如果需要对 StackPanel 及其子元素设置字体大小,应该如何做呢?在 Window 元素中,它有一个属性 FontSize ,可以直接设置。但是, StackPanel 自己本身并没有 FontSize 这样的属性。这就该 Attached 属性出场了。这里我们需要用定义在 TextElement 元素中的 Attached 属性 FontSize 来设置 StackPanel 的字体。

 

    这样, StackPanel 的子元素就能通过属性值继承得到新的 FontSize 属性。对于这样的 XAML 代码, XAML 编译器或者解析器看到这种语法 时,就要求 TextElement (有时也称为 Attached 属性提供者)有相应的静态方法 SetFontSize 来设置对应的属性值。因此,上面的 Attached 属性设置代码,可以如下用 C# 实现:

 

    从这里的代码可以看出, Attached 属性并不神秘。只是调用方法把元素和不相关的属性关联起来。而 SetFontSize 实现也比较简单。 它只是调用 Dependency 属性访问函数所调用的 DependencyObject.SetValue 方法。注意调用的对象是传入的 DependencyObject ,而不是当前的实例:

 

    同样地, Attached 属性也定义了对应的 GetXXX 函数。它调用的 DependencyObject.GetValue 方法:

 

   与普通的 Dependency 属性一样,这些 GetXXX SetXXX 方法除了实现对 GetValue SetValue 的调用,不能做任何其他额外的工作。

   
其实,在 WPF 应用中, Attached 属性更多的用来控制 UI 的布局。除了前面的 StackPanel ,还有 Grid 等等。

   
补充说明:上面的代码还有一个问题需要说明。我们设置 StackPanel 的字体属性时用的是 TextElement 元素。为什么不用其他的元素 Control Button 呢?

   
这个问题的关键之处在于 Dependency 属性的注册方法。我曾在 Dependency 属性 [1] 做过简单的说明。我们看看 Element FontSizeProperty 属性的注册代码:

 

    这里与我们前面的 IsDefault 属性类似,只是 RisterAttached 方法优化了 Attached 属性需要的属性元数据的处理过程。

   
另一方面, Control FontSize 属性是在 TextElement 元素已经注册的属性之上调用 AddOwner 方法,获取一个完全相同的实例引用:

 

   所以,在实现 Attached 属性时我们使用的是 TextElement ,而不是 Control 等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的界面开发技术,其基于.NET Framework平台,并使用C#编程语言进行开发。WPF提供了一套强大的工具和框架,使开发人员能够轻松创建富有吸引力、功能丰富的用户界面。 WPF与传统的Windows Forms相比具有许多优势。首先,WPF支持更加灵活和现代化的用户界面设计,可以轻松地创建透明、动画和多媒体效果等视觉效果。其次,WPF具有更好的分离性,允许开发人员将界面逻辑与业务逻辑进行分离,使代码更加清晰和易于维护。此外,WPF还支持数据绑定和样式模板等功能,使界面开发更加高效和可重用。 在使用WPF进行编程时,首先需要了解XAML(Extensible Application Markup Language)语言,它用于定义WPF界面元素和布局。然后,使用C#语言编写代码逻辑,处理用户交互、数据绑定、事件处理等方面的功能。在WPF中,可以通过使用命令模式和MVVM(Model-View-ViewModel)架构来组织和管理代码,以实现更好的代码分离性。 另外,WPF提供了丰富的控件库,开发人员可以使用这些控件来构建各种功能和复杂的界面。同时,WPF还支持自定义控件的开发,开发人员可以根据具体需求创建自己的控件。 总之,WPF是一种强大的界面开发技术,可以帮助开发人员创建出具有丰富功能和吸引力的Windows应用程序。同时,使用C#语言进行开发可以使开发过程更加高效和灵活。无论是初学者还是有经验的开发人员,都可以从WPF编程宝典中学习到丰富的知识和技巧,提高自己的WPF编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值