当前位置: 首页 > news >正文

海南做网站找谁最新手机排行榜2021

海南做网站找谁,最新手机排行榜2021,网站二级分类,阿里云主机如何安装wordpress除了普通的 CLR 属性#xff0c; WPF 还有一套自己的属性系统。这个系统中的属性称为依赖属性。 1. 依赖属性 为啥叫依赖属性#xff1f;不叫阿猫阿狗属性#xff1f; 通常我们定义一个普通 CLR 属性#xff0c;其实就是获取和设置一个私有字段的值。假设声明了 100 个 …除了普通的 CLR 属性 WPF 还有一套自己的属性系统。这个系统中的属性称为依赖属性。 1. 依赖属性 为啥叫依赖属性不叫阿猫阿狗属性 通常我们定义一个普通 CLR 属性其实就是获取和设置一个私有字段的值。假设声明了 100 个 CLR 属性每个属性占用 8 个字节byte的私有字段。那么实例化 10000 个这个类就至少消耗了 100 * 8 * 10000 7.63M 内存。实际上并非用到所有的属性。这就造成了内存浪费。 如何解决这种属性资源浪费的问题 现实中一个例子假设出去旅游不可能把所有的日常生活用品都带去一般也就带上日常换洗衣物像锅碗瓢盆、洗衣粉、厕纸、洗发水等都要带上岂不乱成一锅。所以有些东西可以在要用的时候再去获取。 这就是 WPF 依赖属性的理念, 依赖属性本身没有值, 它依赖绑定源来获取值。 在 UserControl 中定义一个依赖属性snippet 快捷方式propdp public partial class DependencyPropertyDemo : UserControl {/// summary/// 获取或设置MyProperty的值/// /summary public string MyProperty{get (string)GetValue(MyPropertyProperty);set SetValue(MyPropertyProperty, value);}/// summary/// 标识 MyProperty 依赖属性。/// /summarypublic static readonly DependencyProperty MyPropertyProperty DependencyProperty.Register(nameof(MyProperty), typeof(string), typeof(DependencyPropertyDemo), new PropertyMetadata(default(string)));public DependencyPropertyDemo(){InitializeComponent();} }可以进方法 DependencyProperty.Register 查看实质是调用内部 RegisterCommon 方法把属性注册到一个 Hashtable private static Hashtable PropertyFromName new Hashtable();private static DependencyProperty RegisterCommon(string name,Type propertyType,Type ownerType,PropertyMetadata defaultMetadata,ValidateValueCallback validateValueCallback){//...lock (DependencyProperty.Synchronized)DependencyProperty.PropertyFromName[(object) key] (object) dependencyProperty;//...}这有点类似设计模式中的 享元模式Flyweight Pattern使用哈希表存储已经创建的内存对象来减少内存消耗。 通过 GetValue/SetValue方法, 可以获取/设置依赖属性绑定数据源的值。 疑问我们没有在 DependencyPropertyDemo 类中定义 GetValue/SetValue 方法为什么也能使用呢 因为它们已在基类中定义好了。 实际上任何继承于 DependencyObject 的类中都可以定义依赖属性。我们用到的可视化控件基本都是继承于 Viusal 的自然可以声明依赖属性。 2. 附加属性 附加属性其实也是依赖属性。 使用 sinppet propa快捷方式创建一个附加属性 public static readonly DependencyProperty MyAttachedProperty DependencyProperty.RegisterAttached(MyAttached,typeof(string),typeof(MyAttachedHelper),new FrameworkPropertyMetadata(default(string),flags: FrameworkPropertyMetadataOptions.Inherits));public static string GetMyAttached(DependencyObject target) {return (string)target.GetValue(MyAttachedProperty); }public static void SetMyAttached(DependencyObject target, string value) {target.SetValue(MyAttachedProperty, value); }可以看到它最终也是调用 DependencyProperty.RegisterCommon 来注册属性GetValue/SetValue 方法一样也是基类 DependencyObject 中的 GetValue/SetValue 方法。 只是附加属性的使用场景不太一样 依赖属性: 当希望类中某个属性支持数据绑定时, 可以用依赖属性。 附加属性: 当希望类可以绑定到某个数据源但该类本身又没有这个依赖属性, 就可以借助其它类的依赖属性做绑定。这个过程即类附加了其它类的一个依赖属性简称附加属性。 3. 完整示例 在自定义控件中声明一个依赖属性 public class MyControl : Control {/// summary/// 获取或设置MyProperty的值/// /summary public string MyProperty{get (string)GetValue(MyPropertyProperty);set SetValue(MyPropertyProperty, value);}/// summary/// 标识 MyProperty 依赖属性。/// /summarypublic static readonly DependencyProperty MyPropertyProperty DependencyProperty.Register(nameof(MyProperty), typeof(string), typeof(MyControl),new PropertyMetadata(default(string)));static MyControl(){DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl)));} }在另一个类中声明一个附加属性 public class MyAttachedHelper : DependencyObject {public static readonly DependencyProperty MyAttachedProperty DependencyProperty.RegisterAttached(MyAttached,typeof(string),typeof(MyAttachedHelper),new FrameworkPropertyMetadata(default(string),flags: FrameworkPropertyMetadataOptions.Inherits));public static string GetMyAttached(DependencyObject target){return (string)target.GetValue(MyAttachedProperty);}public static void SetMyAttached(DependencyObject target, string value){target.SetValue(MyAttachedProperty, value);} }为控件指定样式 Style TargetType{x:Type controls:MyControl}Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type controls:MyControl}Grid BackgroundDeepPinkStackPanel OrientationHorizontalTextBlockMargin4HorizontalAlignmentCenterVerticalAlignmentCenterText{TemplateBinding MyProperty} /TextBlockMargin4HorizontalAlignmentCenterVerticalAlignmentCenterTextand /TextBlockMargin4HorizontalAlignmentCenterVerticalAlignmentCenterText{TemplateBinding viewModels:MyAttachedHelper.MyAttached} //StackPanel/Grid/ControlTemplate/Setter.Value/Setter /Style绑定数据源 public class DpViewModel {public string Name1 { get; set; }public string Name2 { get; set; }public DpViewModel(){Name1 Tom~;Name2 Jerry~;} }使用控件 Grid Width200 Height100controls:MyControl MyProperty{Binding Name1} viewModels:MyAttachedHelper.MyAttached{Binding Name2} / /Grid显示结果 均绑定成功。
http://www.w-s-a.com/news/560915/

相关文章:

  • 免费的黄冈网站有哪些平台可以聊天呢要查询一个网站在什么公司做的推广怎么查
  • 凡客建站登录入口网站建设先进部门评选标准
  • 响应式设计 手机网站政务中心建设网站
  • 如何做卖衣服的网站网站登录接口怎么做
  • 网站源码下载了属于侵权吗499全包网站建设
  • 怎样创建网站信息平台网络推广官网首页
  • 网站建设的课程网站 逻辑结构
  • 开通企业网站搬瓦工暗转wordpress
  • 成都网站建设有名的公司怎么做出有品牌感的网站
  • 中国网站的建设淘宝数据网站开发
  • 深圳建站网站模板wordpress 文章最长
  • 服务器建立网站建网站做seo
  • 帮人做彩票网站支付接口网上请人做软件的网站
  • 万全网站建设wl17581做旅游广告在哪个网站做效果好
  • 钢城网站建设安徽省住房和城乡建设厅网站
  • 协会网站建设方案大良营销网站建设好么
  • 网站引导页一般是什么格式网页设计师的应聘岗位
  • 构建网站空间网站开发与维护招聘
  • 网站建设的网页怎么做番禺网站开发哪家强
  • 网站开发是程序员吗百度网盘下载电脑版官方下载
  • 中国电力建设集团网站杭州网站运营
  • 大气网站模板下载效果好的网站建设公
  • 住房和城乡建设部网站打不开重庆市建设工程信息网官网30系统
  • 做美食软件视频网站大数据精准营销策略
  • 网站后台密码错误陕西大型网站建设
  • 网站建站中关键字搜索怎么弄wordpress 后台插件无法访问
  • 做减肥餐的网站网站优化注意事项
  • 做网站做推广有效果吗专门做淘宝优惠券的网站
  • 菜谱网站开发系统ps做网页效果图
  • 徐州品牌网站建设wordpress多重筛选页面