星空网 > 软件开发 > ASP.net

WPF系列 —— 控件添加依赖属性

依赖属性的概念,用途 ,如何新建与使用。本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用。

先上TimePicker的一个效果图。

WPF系列 —— 控件添加依赖属性

 

 

 

 

 

 

 

 

 

概念 和 用途:依赖属性是对传统.net 属性的一种封装,使一个传统.net属性支持 WPF 中的 数据绑定、动画、样式 等功能。

新建:任意代码代码文件中 ,输入 propdp 再双击tab键。生成如下的代码块。

     MyProperty: 依赖属性的名称; ownerclass: 当前依赖属性绑定的所有类; new PropertyMetadata 是依赖属性的初始化对象,这里0代表默认值。

public int MyProperty{  get { return (int)GetValue(MyPropertyProperty); }  set { SetValue(MyPropertyProperty, value); }}// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...public static readonly DependencyProperty MyPropertyProperty =  DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));

使用:这里我们使用绑定绑定,稍后使用自定义控件的Time属性来介绍。

如何使用依赖属性构建一个带绑定的TimePicker自定义控件

新建一个项目名称为DependencyPropertyDemo的WPF 项目 WPF系列 —— 控件添加依赖属性,新建一个TimePicker的自定义控件。Xaml布局如下:

<Grid>    <Grid.ColumnDefinitions>      <ColumnDefinition Width="9*"/>      <ColumnDefinition Width="24"/>      <ColumnDefinition Width="10*"/>    </Grid.ColumnDefinitions>    <ComboBox Name="cbbHour" Grid.Column="0"/>    <Label Content=":" Grid.Column="1"/>    <ComboBox Name="cbbMinute" Grid.Column="2"/>  </Grid>

BehindCode新建一个名称为Time的依赖属性,如下:

public string Time    {      get { return (string)GetValue(TimeProperty); }      set { SetValue(TimeProperty, value); }    }    public static readonly DependencyProperty TimeProperty =      DependencyProperty.Register("Time",        typeof(string),        typeof(TimePicker),        new PropertyMetadata(defaultValue: "00:00",           propertyChangedCallback: null,          coerceValueCallback: coerceValueCallback));    private static object coerceValueCallback(DependencyObject d, object baseValue)    {      if (baseValue != null)      {        var control = d as TimePicker;        var times = baseValue.ToString().Split(':');        control.cbbHour.SelectedItem = times[0];        control.cbbMinute.SelectedItem = times[1];        return baseValue.ToString();      }      return baseValue;    }

这里详细介绍一下PropertyMetadata的三个参数:defaultValue:默认值,不用介绍了;propertyChangedCallback:属性变化后的通知事件,这里不需要任何通知,所以传入null值;coerceValueCallback:这是属性值新值绑定时,通知事件,这里使用得到的值来给控件赋值。到这里Time依赖属性也就完成一半了。

TimePicker属性依赖属性Time的绑定

绑定方式很简单,如下图。若Time是一个普通的.net属性而非依赖属性的话,是不能这样使用绑定方式的。

<local:TimePicker HorizontalAlignment="Left" Margin="137,38,0,0" VerticalAlignment="Top" Width="161"             Time="{Binding StartTime,Mode=TwoWay}"/>

假设添加在TimePicker后台添加一个Code的普通属性,使用绑定的话,会出现如下的状况。

WPF系列 —— 控件添加依赖属性

 

后话总结

依赖属性使用是有一定限制的,就是他注册的类对象,也就是上文的ownerclass必须继承DependencyObject 这个基类,不过不用担心,WPF大部分元素都间接的集成这个基类。

本文实现的TimePicker控件可以在一些情况下解决WPF下没有Time选择控件的问题。

Demo下载

如果,您认为阅读这篇博客让您有些收获,请点击下面的【推荐】和 【关注】按钮,感谢大家的支持,我是朝兮兮。WPF系列 —— 控件添加依赖属性




原标题:WPF系列 —— 控件添加依赖属性

关键词:wpf

wpf
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Linio怎么发货?Linio物流介绍:https://www.kjdsnews.com/a/778456.html
Kogan平台入驻条件及流程介绍:https://www.kjdsnews.com/a/778457.html
Rue du Commerce怎样入驻,Rue du Commerce介绍:https://www.kjdsnews.com/a/778458.html
Privalia入驻要求有哪些?Privalia怎么注册?:https://www.kjdsnews.com/a/778459.html
Opensky怎么样,Opensky平台入驻要求:https://www.kjdsnews.com/a/778460.html
从厦门乌石浦到深圳大芬村,全球油画“加工厂”的变与谋:https://www.kjdsnews.com/a/778461.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
中国有哪些著名的酒店品牌。:https://www.vstour.cn/a/411242.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流