36 c# silverlight wpf dependency-properties
依赖项属性的创建方式与属性相同.
是否仅在创建自定义控件时使用依赖项属性?
Ant*_*nes 58
依赖属性和标准属性是完全不同的.
依赖项属性提供的关键功能是对绑定和动画的支持.如果要使用Binding或模板绑定为属性分配值,则该属性需要是依赖项属性.在为属性设置动画时,依赖项属性可以跟踪当前指定的值和当前的动画值.
另一个经常被忽视的优点是只有分配了值的属性才需要存储.典型的控件可以具有很多属性,但是它的罕见代码为所有属性分配了一个新值,实际上,大多数属性都保留了默认值,实际设置的只有少数.使用依赖项属性时,默认值将存储为与属性相关的元数据,如果属性保持未分配状态,则不需要为每个控件实例分配任何内存.
依赖属性不仅限于控件(任何派生自DependencyObject可以拥有它们的东西),但它是在控件上或至少FrameworkElements在它们最有用的地方.
Kis*_*mar 22
依赖属性的优点
事实上,依赖属性比普通的CLR属性有很多优点.
INotifyPropertyChanged每当修改属性的值时,每个Dependency属性都会调用,DataBinding内部支持.要了解更多信息INotifyPropertyChanged,请阅读.在这些中,某些功能仅由Dependency Property支持.Animation,Styles,Templates,属性值继承等只能使用依赖属性参加.如果在这种情况下使用CLR属性,编译器将生成错误.
请仔细阅读这些文章,
http://www.codeproject.com/KB/WPF/BeginWPF4.aspx#diff
和 http://www.dotnetfunda.com/articles/article961-wpf-tutorial--dependency-property-.aspx
和 http://msdn.microsoft.com/en-us/library/cc221408(VS.95).aspx
Dependency属性是一个属性(不是本身,但依赖于另一个属性,比如XAML Binding属性),它注册另一个属性.
dependecy属性通过注册来注册后面代码中的另一个绑定属性.我的项目中使用的示例如下:
public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(CustomImagePlaceHolder), new PropertyMetadata(null));
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,ImageUri是一个依赖属性,它注册Source,在generic.xaml中定义/声明(无论是否已声明,已定义或其他任何内容),如下所示:
..HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
/>
Run Code Online (Sandbox Code Playgroud)
所以这里非常重要的是,XAML中的模板绑定值应该在后面的代码中注册为依赖属性.
因此,当我们在XAML中定义Image Source应该与Source绑定模板时,我们已经注册了与DependencyProperty相同的Source.
我们必须说哪种类型的依赖属性是,在上面的例子中Source是BitmapImage的类型,所以我们定义了typeof(BitmapImage).
现在这个依赖项属性的owner/parent是我们的customControlClass CustomImagePlaceHolder,我们在注册时再次定义了它.
现在通过使用我们的属性设置depndency属性的值,如下所示:
public BitmapImage Source
{
get
{
string strURI = (string)GetValue(CustomImagePlaceHolder.ImageUri);
return new BitmapImage(new Uri(strURI));
}
set
{
SetValue(CustomImagePlaceHolder.ImageUri, value);
}
}
Run Code Online (Sandbox Code Playgroud)
现在这就是这样,我们将代码隐藏或xaml的值设置为上面定义的source属性,并且它设置依赖属性ImageUri的值,inturn设置模板绑定Source中的值,因为我们有将ImageUri注册为Source,即presennt generic.xaml.
| 归档时间: |
|
| 查看次数: |
22206 次 |
| 最近记录: |