依赖属性(Dependency Properties)基础
Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展common languageruntime (CLR) 属性的功能。 这些服务通常统称为 WPF 属性系统。 由 WPF 属性系统支持的属性称为依赖项属性。依赖属性是一种可以自己没有值,并能通过使用Binding从数据源获得值的属性(通俗的讲,就是依赖在别的属性上)。
例子:书写MyTextBox控件,继承自TextBox。给MyTextBox添加MyText依赖属性: //依赖属性名称MyTextProperty
//依赖属性标识符MyText
public static readonly DependencyProperty MyTextProperty =
DependencyProperty.Register("MyText",typeof(string),typeof(MyTextBox));
//依赖属性的CLR属性包装
public string MyText
{
get { return (string)GetValue(MyTextProperty); }
set { SetValue(MyTextProperty,value); }
}
Register 方法 参数说明
依赖项属性值可以通过引用资源来设置。 <Window.Resources> <!--资源--> <sys:String x:Key="text">text_Resources</sys:String> </Window.Resources> <Grid> <!--Text属性引用资源--> <MyTextBox:MyTextBox x:Name="myTextBox" HorizontalAlignment="Left" Height="44" Margin="70,81,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="213" Text="{DynamicResource text}"/> </Grid>
绑定注意点:(1) 绑定必须指定数据上下文DataContext; (2)绑定源必须是属性,变量无效; (3)绑定源必须是公开的Public; (4)如果绑定源更改时,控件绑定目标依赖属性需要跟随更改,那么绑定源必须继承INotifyPropertyChanged接口。 示例(TextBox.Text依赖属性绑定到MainWindow类中的TextForBinding属性): public string TextForBinding { get; set; } 继承INotifyPropertyChanged接口的写法: public partial class MainWindow : Window,INotifyPropertyChanged { public string TextForBinding { get; set; } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string info) { PropertyChangedEventHandler handler =PropertyChanged; if (handler != null) { handler(this,new PropertyChangedEventArgs(info)); } } } XAML中: Text="{Binding TextForBinding}"
示例(写一个红色前景色的样式并引用): 书写样式: <Window.Resources> <!--资源--> <sys:String x:Key="text">text_Resources</sys:String> <Style x:Key="MyStyle" TargetType="MyTextBox:MyTextBox"> <Setter Property="Foreground" Value="Red" /> </Style> </Window.Resources> 引用样式 Style="{DynamicResource MyStyle}"
示例(鼠标进入文本框时文本框变宽): <MyTextBox:MyTextBox x:Name="myTextBox" HorizontalAlignment="Left" Height="44" Margin="70,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="213" Text="{Binding TextForBinding}" Style="{DynamicResource MyStyle}"> <MyTextBox:MyTextBox.Triggers> <EventTrigger RoutedEvent="TextBox.MouseEnter"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="myTextBox" Storyboard.TargetProperty="Width" By="100" Duration="0:0:2"/> </Storyboard> </BeginStoryboard> </EventTrigger> </MyTextBox:MyTextBox.Triggers> </MyTextBox:MyTextBox> 鼠标离开时的没写,大家可以自己写下。
在依赖属性进阶中说明。
元素可以从其在对象树中的父级继承依赖项属性的值。 在功能2的数据绑定中,给窗体绑定数据上下文DataContext,代码如下: public partial class MainWindow : Window,INotifyPropertyChanged { public MainWindow() { InitializeComponent(); TextForBinding = "TextForBinding"; this.DataContext = this; } … } 子对象(MyTextBox)中的为指定数据上下文即可进行数据绑定。
自定义控件具有实现为依赖项属性的属性,则它将收到相应的适用于 Visual Studio 的 WPF 设计器支持。 <MyTextBox:MyTextBox x:Name="myTextBox" MyText="WPF 设计器集成"/>
最高优先级将最先列出,顺序如下:
代码 参考内容:http://msdn.microsoft.com/zh-cn/library/ms752914(v=vs.100).aspx
作者:FoolRabbit (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |