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

怎么样让网站正常解析奢侈品 网站建设方案

怎么样让网站正常解析,奢侈品 网站建设方案,wordpress头像不显示,网站开发搭建合同第4章#xff1a;依赖项属性 本章目标 理解依赖项属性理解属性验证 依赖项属性 ​ 属性与事件是.NET抽象模型的核心部分。WPF使用了更高级的依赖项属性#xff08;Dependency Property#xff09;功能来替换原来.NET的属性#xff0c;实现了更高效率的保存机制#xf…第4章依赖项属性 本章目标 理解依赖项属性理解属性验证 依赖项属性 ​ 属性与事件是.NET抽象模型的核心部分。WPF使用了更高级的依赖项属性Dependency Property功能来替换原来.NET的属性实现了更高效率的保存机制还添加了附加功能如属性变更通知以及强制回调、属性值继承在逻辑树中向下传播默认属性值的能力以及属性有效性验证等。同时依赖项属性也是WPF许多重要功能的基础包括动画、数据绑定以及样式。 ​ 使用依赖项属性包括三个部分定义依赖项属性注册依赖项属性以及添加属性包装器。 定义依赖项属性 ​ 定义依赖项属性使用三个修饰词public、static、readonly。数据类型为DependecyProperty而每一个依赖项属性都会有一个去掉“Property”的CLR属性和他对应而我们在xaml中访问的都是CLR属性。 ​ 根据约定定义依赖项属性的字段的名称是在普通属性的末尾处加上单词Property。根据这种命名方式可以从实际属性的名称中区分出依赖项属性的定义。字段的定义使用了 readoly 关键字这意味着只能在 FrameworkElement 类的静态构造函数中队旗进行设置。 ​ 例如FrameworkElement 类定义了 Margin 属性在 FrameworkElement 类中需要使用类似下面的代码来定义Margin 属性 注册依赖项属性 ​ 定义 DependencyProperty对象只是第一步而已。为了使用依赖项属性还需要使用 WPF注册创建的依赖项属性。这一步骤需要在任何使用属性的代码之前完成因此必须在与其关联的类的静态构造函数中进行。 ​ WPF 确保 DependencyProperty 对象不能被直接实例化因为 DependencyProperty 类没有公有的构造函数。相反只能使用静态的 DependencyProperty Register0方法创建 DependencyProperty实例。WPF 还确保在创建 DependencyProperty 对象后不能改变该对象因为所有DependencyProperty 成员都是只读的。它们的值必须作为 Register0方法的参数来提供。 下面的代码显示了如何创建 DependencyProperty 对象。在此FrameworkElement类使用静态构造函数来初始化 MarginProperty 添加属性包装器 ​ 创建依赖项属性的最后一个步骤是使用传统的.NET 属性封装WPF依赖项属性。但典型的过程是检索或设置某个私有字段的值而WPF属性的属性过程是使用在 DependencyObject 基类中定义的 GetValue()和 SetValue()方法。 共享的依赖项属性 ​ 尽管一些类具有不同的继承层次但他们会共享同一依赖项属性。例如TextBlock.FontFamily属性和 Control.FontFamily 属性指向同一个静态的依赖项属性该属性实际上实在 TextElement 类中定义的 TextElement.FontFamilyProperty 依赖项属性。TextElement 类的静态构造函数注册该属性而 TextBlock 类和Control 类的静态构造函数知识通过调用 DependencyProperty.AddOwner()方法重用该属性 TextBlock类 Control类 附加的依赖项属性 ​ 附加属性是一种依赖项属性由WPF 属性系统管理。不同之处在于附加属性被应用到的类并非定义附加属性的那个类。例如Grid 类定义了Row 和 Column 附加属性这两个属性被用于设置Grid 面板包含的元素以指明这些元素应被放到哪个单元格之中。类似的DockPancel 类定义了 Dock 附加属性而 Canvas 类定义了Left、Right、Top和Bottom 附加属性。 ​ 为了定义附加属性需要使用 RegisterAttached() 方法,而不是使用 Register() 方法.下面列举了一个注册Grid.Row 属性的例子: ​ 当创建附加属性时不必定义.NET 属性封装器。这是因为附加属性可以被用于任何依赖对象。例如Grid.Row 属性可能被用于 Grid 对象(如果在Grid 控件中嵌套了另一个Grid 控件)也可能被用于其他元素。实际上Grid.Row 属性甚至可以被用于并不位于 Grid控件中的元素------- 甚至在元素树中根本就不存在 Grid 对象。 ​ 不是使用 .NET 属性封装器反而附加属性需要调佣两个静态方法来设置和获取属性值这两个方法使用为人熟知的 SetValue() 和 GetValue() 方法(继承自 DependencyObject 类)。这两个静态方法应当命名为 SetPropertyName() 和 GetPropertyName().下面是实现 Grid.Row 附加属性的静态方法 下面的示例使用代码将元素放到Grid 控件中第一行 Grid.SetRow(txtElement,0)也可直接调用 SetValue() 或 GetValue() 方法从而绕过这两个静态方法 txtElement.SetValue(Grid.RowProperty,0)属性验证 ​ 在定义任何类型的属性时都需要面对错误设置属性的可能性。对于传统的.NET属性可尝试在属性设置器中捕获这类问题。但对于依赖项属性而言这种方法不合适因为可能通过WPF 属性系统使用 SetValueO方法直接设置属性。 ​ 作为代替WPF 提供了两种方法来阻止非法值 ValidateValueCallback该回调函数可接受或拒绝新值。通常该回调函数用于捕获违反属性约束的明显错误。可作为 DependencyProperty.Register方法的一个参数提供该回调函数。CoerceValueCallback该回调函数可将新值修改为更能被接受的值。该回调函数通常用于处理为相同对象设置的依赖项属性值相互冲突的问题。这些值本身可能是合法的但当同时应用时它们是不相容的。为了使用这个回调函数当创建 Framework-PropertyMetadata 对象时然后该对象将被传递到 DependencyProperty.Register方法作为构造函数的一个参数提供该回调函数。 下面是当应用程序试图设置依赖项属性时所有这些内容的作用过程 1 首先CoerceValueCallback 方法有机会修改提供的值通常使提供的值和其他属性相容或者返回 DependencyProperty.UnsetValue这会完全拒绝修改。 2 接下来激活 Validate ValueCallback 方法。该方法返回 true 以接受一个值作为合法值或者返回 false拒纯值。与 Coerce ValueCallback 方法不同Validate ValueCallback 方法不能访问设置属性的实际对象这意味着您不能检查其他属性值。 3 最后如果前两个阶段都获得成功就会触发 PropertyChangedCallback 方法。此时如果希望为其他类提供通知可以引发更改事件。 验证回调 ​ DependencyProperty.Register() 方法接受可选的验证回调函数 MarginProperty DependencyProperty.Register( Margin, typeof(Thickness), _typeofThis, new FrameworkPropertyMetadata(default(Thickness),FrameworkPropertyMetadataOptions.AffectsMeasure), IsMarginValid);private static bool IsMarginValid(object value) {return ((Thickness)value).IsValid(allowNegative: true, allowNaN: false, allowPositiveInfinity: true, allowNegativeInfinity: false); }​ 强制回调 ​ 通过 FrameworkPropertyMetadata 对象使用 CoerceValueCallback 回调函数。 FrameworkPropertyMetadata metadata new FrameworkPropertyMetadata(); metadata.CoerceValueCallback new CoerceValueCallback(CoerceMaximum);DependencyProperty.Register(Maximum,typeof(double),typeof(RangeBase),metadata);​ 可以通过CoerceValueCallback 回调函数处理相互关联的属性。例如ScrollBar 控件提供了 Maximum、Minimum 和 Value 属性这些属性都继承自 RangeBase 类。保持对这些属性进行调整的一种方法是使用属性强制。例如当设置Maximum 属性时必须使用强制以确保不能小于 Minimum 属性的值 ​ 当设置 Value 属性时会发送类似的强制过程。对 Value 属性进行强制确保不会超出由 Minimum 和Maximum 属性定义的范围使用下面的代码 ​ Minimum 属性根本不使用值强制。相反一旦值发生变化就触发PropertyChangedCallback,然后通过手动触发 Maximum 和 Value 属性的强制过程使它们适应 Minimum 属性值的变化 ​ 类似的一旦设置或强制 Maximum 属性的值那么也会手动强制 Value 属性以适应 Maximum 属性值的变化 ​ 如果设置的值相互冲突最终结果是 Minimum 属性具有优先权其次是 Maximum 属性并且可能会被 Minimum 属性强制最后是 Value 属性并且可能会被 Maximum 和 Minimum 属性强制。 本章小结 ​ 本章深入分析了 WPF 依赖项属性。首先介绍如何定义和注册依赖项属性接下类介绍了如何将它们插入到其他 WPF 服务中以及它们如何支持验证和强制。 课后作业 无
http://www.w-s-a.com/news/509476/

相关文章:

  • 漯河网站开发运营seo是什么意思
  • 网站建设的征求意见稿iis 网站 红
  • 网站搭建教室企业网站开发实训心得
  • 阿克苏建设网站佛山app定制
  • 做淘宝网站要求与想法大型网站建设推荐
  • 在百度做网站赚钱吗跨境电商网站开发
  • 酒店网站建设策划方案南昌网站建设南昌
  • 临沂罗庄做网站房产cms
  • 五合一网站做优化好用吗网站设计的专业流程
  • 毕业设计论文网站开发需要多少网站seo建设方案
  • h5页面用什么做杭州优化外包哪里好
  • 许昌网站建设百姓国货app下载
  • 什么是建站装修公司做宣传在哪个网站
  • 阿里云虚拟主机多个网站吗大庆油田建设集团网站
  • 坂田公司做网站公司有网站域名后如何建网站
  • 自媒体网站程序淘宝网站维护
  • 凡科网站建设网站wordpress 七牛oss
  • 搬瓦工的主机可以用来做网站吗分类信息网站开发需求方案
  • 上海高端网站开发站霸网络国际网站建设的目的
  • 程序员招聘求职的网站做网站加入广告联盟
  • 网站建设的技术方案模板易做文学网站的logo
  • 建设国家标准官方网站响应式网站切图
  • 网站链接数怎么做wordpress安装网址
  • 沈阳建网站 哪家好如何做旅游网站推销
  • 继续网站建设南通网站建设方法
  • 淮南公司网站建设如果做京东优惠卷的网站
  • 二手房网站平台怎么做项目工程监理公司网站建设方案
  • 秦皇岛做网站公司小说推广平台有哪些
  • php网站做分享到朋友圈天元建设集团有限公司信用代码
  • 邱县做网站在线免费图片编辑器