- 浏览: 1153740 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
冷酷月光:
楼主。请教一下。arcgis for android 有提供地 ...
ArcGIS API For Android离线地图的实现 -
winney117:
请问如何GET已有网页上的指定内容?比如百度文库中的某一篇文章 ...
三步发布java方式的rest服务 -
zige1012:
您好,我想问问我想换个自己地图的切片,也有4层(L0-L3), ...
ArcGIS API For Android离线地图的实现
学习SL/WPF,Dependency Properties(依赖属性)是一个全新(陌生)但又无法回避的概念。
http://www.wpftutorial.net/DependencyProperties.html
这里有一篇通俗易懂的相关文章,不过是E文的,E文不好的朋友,也可以参考下面的内容:
1.为什么会出现依赖属性?
先回想一下传统的属性(Property):通常我们读取或赋值一个属性时,实际上是在对属性背后的某个私有成员进行读写。那么随着对象的属性越来越多,再加上从对象派生出去的子对象,子对象再生出“孙子”对象......最终的对象运行实例中会有大量的私有成员,而每私有成员都要分配内存,占用一定的资源。
但反过来想想,通常我们在使用一个控件/对象时,往往只用到了某几个属性,大部分属性(有时候甚至达到90%以上)都是采用的默认值(或者也可以理解为没有用到),这对于WPF/SL来说无疑是一种极大的性能损耗。
所以在此背景之下,DP(Dependency Properties的简称)就出现了,我们再回想一下静态(static)方法或成员,静态成员/方法的调用不依赖于实例,它是class级别的,不管这个类有多少个实例,静态成员在内存中只占一份,这正是我们所要的!
2.依赖属性的大致原理及好处
所有具备依赖属性的对象,都是继承自DependencyObject,DependencyObject中有一个"字典"存储区用来存放依赖属性,而且都是用static方式读取的,所以你现在应该想明白了:为啥不能直接用txt.Left = xxx来直接赋值,而必须用txt.SetValue(Canvas.Left,xxx)来处理,因为static成员是实例无法调用的。
DP的优点:
(1)有效降低内存消耗。
(2)直接继承上级的属性值(这里也解释了为什么上级控件对下级控件自动布局,因为下级控件自动继承了上级控件的相关属性值)
(3)自动实现了“变化通知”(dp有内置的Change Notification回调接口)
3.依赖属性值的读取策略
这张图描述了GetValue与SetValue的内部读取策略.
4.依赖属性的使用示例:
下面我们演示如何给一个用户自定义控件添加Message依赖属性
(1)先建一个Silverlight User Control,取名为MyControl
CS部分:(技巧:vs2008中,只要键入propdp,再连敲二次Tab键,vs就会自动添加一个依赖属性的代码模板)
这里我们定义了一个Message的string类型依赖属性,和普通属性的区别是:必须使用DependencyProperty.Register来注册该属性,而且“属性命名”要以Property为后缀;另外在读取时,必须调用SetValue/GetValue静态方法来读取其值,最后我们还可以添加一个"属性值变化时的"回调处理。
(2)将MyControl放到MainPage.xaml中小试牛刀
MainPage.Xaml内容如下:
MainPage.Xaml.cs内容如下:
运行后,点击按钮将改变MyControl控件的Message属性值,同时MyControl中的文本控件的文字也将变成"新值"
http://www.wpftutorial.net/DependencyProperties.html
这里有一篇通俗易懂的相关文章,不过是E文的,E文不好的朋友,也可以参考下面的内容:
1.为什么会出现依赖属性?
先回想一下传统的属性(Property):通常我们读取或赋值一个属性时,实际上是在对属性背后的某个私有成员进行读写。那么随着对象的属性越来越多,再加上从对象派生出去的子对象,子对象再生出“孙子”对象......最终的对象运行实例中会有大量的私有成员,而每私有成员都要分配内存,占用一定的资源。
但反过来想想,通常我们在使用一个控件/对象时,往往只用到了某几个属性,大部分属性(有时候甚至达到90%以上)都是采用的默认值(或者也可以理解为没有用到),这对于WPF/SL来说无疑是一种极大的性能损耗。
所以在此背景之下,DP(Dependency Properties的简称)就出现了,我们再回想一下静态(static)方法或成员,静态成员/方法的调用不依赖于实例,它是class级别的,不管这个类有多少个实例,静态成员在内存中只占一份,这正是我们所要的!
2.依赖属性的大致原理及好处
所有具备依赖属性的对象,都是继承自DependencyObject,DependencyObject中有一个"字典"存储区用来存放依赖属性,而且都是用static方式读取的,所以你现在应该想明白了:为啥不能直接用txt.Left = xxx来直接赋值,而必须用txt.SetValue(Canvas.Left,xxx)来处理,因为static成员是实例无法调用的。
DP的优点:
(1)有效降低内存消耗。
(2)直接继承上级的属性值(这里也解释了为什么上级控件对下级控件自动布局,因为下级控件自动继承了上级控件的相关属性值)
(3)自动实现了“变化通知”(dp有内置的Change Notification回调接口)
3.依赖属性值的读取策略
这张图描述了GetValue与SetValue的内部读取策略.
4.依赖属性的使用示例:
下面我们演示如何给一个用户自定义控件添加Message依赖属性
(1)先建一个Silverlight User Control,取名为MyControl
<UserControl x:Class="DPStudy.MyControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <Border CornerRadius="5" BorderThickness="3" BorderBrush="#FFEF410D" Width="300" Height="40" Margin="5" > <TextBlock x:Name="txt" Text="" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock> </Border> </UserControl>
CS部分:(技巧:vs2008中,只要键入propdp,再连敲二次Tab键,vs就会自动添加一个依赖属性的代码模板)
using System.Windows; using System.Windows.Controls; namespace DPStudy { public partial class MyControl : UserControl { public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(MyControl), new PropertyMetadata("Message的默认值", new PropertyChangedCallback(OnMessagePropertyChanged))); public string Message { get { return (string)GetValue(MessageProperty); } set { SetValue(MessageProperty, value); } } /// <summary> /// Message变化时的通知处理 /// </summary> /// <param name="d"></param> /// <param name="e"></param> private static void OnMessagePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MyControl ctl = d as MyControl; ctl.txt.Text = d.GetValue(MyControl.MessageProperty).ToString(); } public MyControl() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MyControl_Loaded); } void MyControl_Loaded(object sender, RoutedEventArgs e) { this.txt.Text = Message;//初始加载时,显示Message的初始值 } } }
这里我们定义了一个Message的string类型依赖属性,和普通属性的区别是:必须使用DependencyProperty.Register来注册该属性,而且“属性命名”要以Property为后缀;另外在读取时,必须调用SetValue/GetValue静态方法来读取其值,最后我们还可以添加一个"属性值变化时的"回调处理。
(2)将MyControl放到MainPage.xaml中小试牛刀
MainPage.Xaml内容如下:
<UserControl x:Class="DPStudy.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:l="clr-namespace:DPStudy" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <StackPanel x:Name="LayoutRoot"> <l:MyControl x:Name="myctl"></l:MyControl> <Button Click="Button_Click" Content="改变Message属性值" Width="130" ></Button> </StackPanel> </UserControl>
MainPage.Xaml.cs内容如下:
using System.Windows; using System.Windows.Controls; namespace DPStudy { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { myctl.SetValue(MyControl.MessageProperty, "新值"); } } }
运行后,点击按钮将改变MyControl控件的Message属性值,同时MyControl中的文本控件的文字也将变成"新值"
发表评论
-
WCF Service中HttpContext.Current为null的解决办法
2010-12-28 17:36 2145http://s.click.taobao.com/t_8?e ... -
删除文件
2010-05-21 16:35 1226/// <summary> ... -
Silverlight 3中的Behavior技术
2010-04-15 18:52 1985转:http://blog.csdn.net/dotn ... -
C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
2010-03-24 13:31 11393C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有 ... -
C#中几种获取路径方法
2010-03-22 14:37 3124string str1 =Process.GetCurrent ... -
c# rar压缩解压缩
2010-03-19 14:42 5284此程序利用 WinRAR 程序对文件进行压缩,命令行语法可参考 ... -
译文:详谈Silverlight 3.0中的数据验证 (Silverlight Validation in Detail)
2010-03-18 15:48 2550在先前的帖子里我提到 ... -
C# 读写XML文件
2010-03-17 15:26 1413phone.xml <?xml version=&quo ... -
C#XML读写
2010-03-09 13:00 3857一.前言: XML是微软.Ne ... -
Silverlight Make Into Control
2010-02-10 14:57 1314本文主要介绍了Expression ... -
简单的等待进度条
2010-02-10 10:58 4332最近我需要制作一些简 ... -
Silverlight 数据绑定(Binding)
2010-02-09 17:12 3764http://blog.csdn.net/banmuhuang ... -
silverlight中的几个冷门标记 {x:Null},d:DesignWidth,d:DesignHeight
2010-02-09 12:26 2278{x:Null}:用于设置某属 ... -
Silverlight Custom Content Control
2010-02-08 20:28 1925As a Silverlight control develo ... -
silverlight应用程序中未处理的错误代码:2104 类别:InitializeError 消息:无法下载 iis上部署Silverlight
2010-02-01 16:30 3977产生错误: 解决方案:第一步:默认网站--属性----- ... -
后台代码动态创建silverlight的Grid
2009-12-08 09:52 4842Code below can add item that co ... -
在 Silverlight 中使用 IValueConverter 实现对绑定数据的格式化
2009-11-11 20:31 3105转载:http://www.cnblogs.com/drive ... -
C# 中的委托和事件
2009-11-04 20:53 1216MyClass.cs using System; us ... -
Visual Studio 2008无法创建silverlight项目
2009-10-15 09:44 2112现象:xp + visual studio 2008 sp1安 ...
相关推荐
在Windows Presentation Foundation(WPF)中,依赖属性(Dependency Property)是实现数据绑定(Data Binding)的核心机制之一。依赖属性允许UI元素与数据源之间建立动态的连接,从而实现视图与模型之间的自动同步...
本资源“依赖注入:Dependency injection-英文书签文字版”提供了一份关于Spring框架中依赖注入的详细讲解,以英文文本的形式呈现,并且带有书签,方便读者快速定位和学习。 依赖注入的核心思想是将组件之间的依赖...
在WPF(Windows Presentation Foundation)开发中,依赖属性(Dependency Property)是实现数据绑定的关键机制。依赖属性允许控件的属性与其他对象的数据源保持同步,从而实现数据驱动的用户界面。接下来,我们将...
在Windows Presentation Foundation(WPF)中,依赖项属性(Dependency Property)是框架的核心特性之一,它为UI元素提供了数据绑定、样式设定、动画支持以及事件处理等强大功能。依赖项属性的机制使得WPF控件能够...
"dependency.rar" 提供了这样的功能,帮助用户查看和理解项目的依赖结构,确保所有必要的库和框架都适当地被引用和版本匹配。下面将详细探讨依赖管理的重要性、依赖库文件工具的功能以及如何使用此类工具。 1. **...
资源介绍:Dependency Walker(依赖项查看器)是一款强大而实用的免费模块依赖性分析工具,专为Windows系统打造,旨在帮助开发者和系统管理员轻松解析和查看应用程序或DLL文件的依赖关系。 Dependency Walker通过...
Dependency Walker,通常缩写为Depends,是一款强大的分析工具,主要用在Windows操作系统环境中,用于检查和理解C++编译的可执行文件或动态链接库(DLL)所依赖的其他DLL模块。这款软件能帮助开发者识别和解决程序...
在IT行业中,依赖属性(Dependency Property)是一种在WPF(Windows Presentation Foundation)和UWP(Universal Windows Platform)框架中广泛使用的特性,它允许组件之间共享数据并实现动态更新。依赖属性提供了一...
它提供了丰富的用户界面元素和设计模式,其中包括依赖属性(Dependency Property)系统。本篇将深入探讨依赖属性的回调、验证和强制值这三个核心概念,并通过一个名为"WpfApplication2"的项目源码进行详细阐述。** ##...
然而,有时我们可能会遇到一些特定的依赖问题,比如在这个案例中,"Unresolved dependency: 'com.aspose:aspose:jar:19'",意味着在执行Maven构建时,Maven无法从配置的阿里云仓库中找到`com.aspose:aspose:jar:19`...
9. **教育和培训**:团队成员应该了解依赖检查的重要性,知道如何解读扫描结果,并学习如何处理潜在的安全问题。 10. **持续改进**:依赖检查不应只在项目初期进行,而应在整个软件生命周期中持续进行,确保新添加...
Dependency Walker 是 Microsoft Visual C++ 中提供的非常有用的 PE 模块依赖性分析工具。主要功能如下: 查看 PE 模块的导入模块。 查看 PE 模块的导入和导出函数。 动态剖析 PE 模块的模块依赖性。 解析 ...
在.NET框架中,依赖属性(Dependency Property)是WPF(Windows Presentation Foundation)和Silverlight等技术中的一个重要概念,它提供了一种灵活的方式来管理和绑定对象的属性。依赖属性系统允许属性值的动态更改...
在WPF中,依赖属性(Dependency Property)是实现数据绑定(Data Binding)的基础之一。本文将围绕依赖属性在WPF中的作用及其实现机制进行深入探讨。 #### 二、依赖属性概述 依赖属性是WPF中一种特殊类型的属性,...
从mysql官网上下载mysql-server_5.7.21-1ubuntu14.04_amd64.deb-bundle.tar,然后进行离线安装,解压该安装包,会出现11个依赖包,按照顺序依次使用sudo dpkg -i 进行安装,中间会报错,显示缺少相应的依赖,具体...
**依赖属性(Dependency Property)**是WPF中的一个重要特性,它允许控件的属性与其他对象(如视图模型)的属性进行绑定,并且支持数据验证、动画和依赖项跟踪。依赖属性的定义包括注册属性、设置默认值、数据类型...
"Depends (Dependency Walker)"是一款强大的系统工具,主要用于分析Windows应用程序和动态链接库(DLLs)的依赖关系。它能够帮助开发者和系统管理员理解程序在运行时需要哪些库文件,从而解决因缺失或版本不匹配的库...
Dependency Walker,通常被称为依赖项浏览器或Depends,是一款强大的系统工具,主要用来分析Windows应用程序及其动态链接库(DLL)的依赖关系。64位版本的Dependency Walker是专门为处理64位Windows操作系统上的程序...
依赖检查等级 依赖项检查gradle插件允许项目监视从属库是否存在已知的已发布漏洞。 当前的版本 最新版本是 用法 以下是快速入门说明。 请参阅以获取有关配置和用法的更多详细信息。 第1步,应用依赖项检查Gradle...
在Windows Presentation Foundation(WPF)中,依赖属性(Dependency Property)和附加属性(Attached Property)是两个核心概念,它们为数据绑定、属性继承以及自定义控件提供了强大的支持。理解并熟练运用这两个...