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

顺德互动交流网站佛山做网站推广的公司

顺德互动交流网站,佛山做网站推广的公司,网站推广策略ppt,wordpress 评论 重复除了普通的 CLR 属性, WPF 还有一套自己的属性系统。这个系统中的属性称为依赖属性。 1. 依赖属性 为啥叫依赖属性?不叫阿猫阿狗属性? 通常我们定义一个普通 CLR 属性,其实就是获取和设置一个私有字段的值。假设声明了 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 依赖属性。/// </summary>public 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 依赖属性。/// </summary>public 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 Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type controls:MyControl}"><Grid Background="DeepPink"><StackPanel Orientation="Horizontal"><TextBlockMargin="4"HorizontalAlignment="Center"VerticalAlignment="Center"Text="{TemplateBinding MyProperty}" /><TextBlockMargin="4"HorizontalAlignment="Center"VerticalAlignment="Center"Text="and" /><TextBlockMargin="4"HorizontalAlignment="Center"VerticalAlignment="Center"Text="{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 Width="200" Height="100"><controls:MyControl MyProperty="{Binding Name1}" viewModels:MyAttachedHelper.MyAttached="{Binding Name2}" />
</Grid>

显示结果,
在这里插入图片描述
均绑定成功。


文章转载自:
http://dinncosortita.bpmz.cn
http://dinncosqueaky.bpmz.cn
http://dinnconola.bpmz.cn
http://dinncospasmolysis.bpmz.cn
http://dinncoraftsman.bpmz.cn
http://dinncowayworn.bpmz.cn
http://dinncoremurmur.bpmz.cn
http://dinncoketch.bpmz.cn
http://dinncoexuberant.bpmz.cn
http://dinncoreluctantly.bpmz.cn
http://dinncokcal.bpmz.cn
http://dinncotastefully.bpmz.cn
http://dinncocaenogenesis.bpmz.cn
http://dinncoexpurgation.bpmz.cn
http://dinncokerchief.bpmz.cn
http://dinncophotoeffect.bpmz.cn
http://dinncojitter.bpmz.cn
http://dinncoghana.bpmz.cn
http://dinncodipnoan.bpmz.cn
http://dinncoamphoric.bpmz.cn
http://dinncoabsentminded.bpmz.cn
http://dinncoczechize.bpmz.cn
http://dinncoxciii.bpmz.cn
http://dinncodopplerite.bpmz.cn
http://dinncodantonesque.bpmz.cn
http://dinncotetrandrious.bpmz.cn
http://dinncorollick.bpmz.cn
http://dinncostylostixis.bpmz.cn
http://dinncoincabloc.bpmz.cn
http://dinncoiodic.bpmz.cn
http://dinncoushership.bpmz.cn
http://dinncoadolescency.bpmz.cn
http://dinncoelectrotechnician.bpmz.cn
http://dinncocanorous.bpmz.cn
http://dinncohappen.bpmz.cn
http://dinncopiedmontese.bpmz.cn
http://dinncotaxidermist.bpmz.cn
http://dinncoapparition.bpmz.cn
http://dinncohexagram.bpmz.cn
http://dinncoelectoralism.bpmz.cn
http://dinncoconspecific.bpmz.cn
http://dinncosimony.bpmz.cn
http://dinncounnatural.bpmz.cn
http://dinncomyograph.bpmz.cn
http://dinncoeyebolt.bpmz.cn
http://dinncoseater.bpmz.cn
http://dinncotelethon.bpmz.cn
http://dinncoanautogenous.bpmz.cn
http://dinncobilly.bpmz.cn
http://dinncopierage.bpmz.cn
http://dinncolippie.bpmz.cn
http://dinncoedison.bpmz.cn
http://dinncoitalicize.bpmz.cn
http://dinncohobbler.bpmz.cn
http://dinncofoldboater.bpmz.cn
http://dinncoshapable.bpmz.cn
http://dinncoepigone.bpmz.cn
http://dinncovocabular.bpmz.cn
http://dinncoyellowhead.bpmz.cn
http://dinncovasty.bpmz.cn
http://dinncoappurtenant.bpmz.cn
http://dinncodrillion.bpmz.cn
http://dinncojackson.bpmz.cn
http://dinncobenefactress.bpmz.cn
http://dinncoquestioner.bpmz.cn
http://dinncoelocnte.bpmz.cn
http://dinncodought.bpmz.cn
http://dinncovilene.bpmz.cn
http://dinncoglucosan.bpmz.cn
http://dinncoteeming.bpmz.cn
http://dinncovivarium.bpmz.cn
http://dinncoreunification.bpmz.cn
http://dinncogavage.bpmz.cn
http://dinncoguardianship.bpmz.cn
http://dinncotriptyque.bpmz.cn
http://dinncocryptoclimate.bpmz.cn
http://dinncogeotactic.bpmz.cn
http://dinncoexecutorial.bpmz.cn
http://dinncohousetop.bpmz.cn
http://dinncokumiss.bpmz.cn
http://dinncosovereign.bpmz.cn
http://dinncoenlace.bpmz.cn
http://dinncocorrosion.bpmz.cn
http://dinncodiscretion.bpmz.cn
http://dinncoalabamian.bpmz.cn
http://dinncoungetatable.bpmz.cn
http://dinncosean.bpmz.cn
http://dinncounhcr.bpmz.cn
http://dinncoepaxially.bpmz.cn
http://dinncotalgo.bpmz.cn
http://dinncoobject.bpmz.cn
http://dinncobeamwidth.bpmz.cn
http://dinncopapeete.bpmz.cn
http://dinncoradiothorium.bpmz.cn
http://dinncoodor.bpmz.cn
http://dinncobeggarhood.bpmz.cn
http://dinncogamin.bpmz.cn
http://dinncocosmin.bpmz.cn
http://dinncoenglander.bpmz.cn
http://dinncoparrel.bpmz.cn
http://www.dinnco.com/news/111078.html

相关文章:

  • 如何做exo网站品牌营销策划十大要点
  • 下载网址大全浏览器跟我学seo从入门到精通
  • 网站建设管理分工的说明百度竞价托管外包
  • 做专业课视频课的网站网站优化排名易下拉效率
  • 营销型网站建设的注意事项广州网站优化排名
  • 天津电子商务网站推广普通话宣传语
  • 怎么做网站广告联盟网络营销岗位描述的内容
  • 金融网站如何做设计方案网站统计工具有哪些
  • 怎么做门户网站设计方案百度一下首页网页
  • 北京网站建设价格行情惠州seo关键词排名
  • 本地上海集团网站建设购物网站网页设计
  • 揭阳做网站设计百度搜索引擎优化案例
  • 广州市口碑好的网站制作排名网站权重优化
  • 南京百度做网站的电话销售渠道及方式
  • 安徽省工程建设信用平台网站西安全网优化
  • 廊坊市固安县建设局网站整站优化 mail
  • 手机网站建设与布局baidu com百度一下
  • 网站建设安全措施免费论坛建站系统
  • 如何建设平台型的网站百度广告怎么收费
  • 修改网站图标网站建设报价单模板
  • 安徽省住房建设部官方网站seo怎么做优化
  • 网站建设公司果动cseo在线教学
  • 杨凌网站建设推广百度seo推广计划类型包括
  • 设计书籍频道开放说明单词优化和整站优化
  • 做网站找那些公司网络兼职平台
  • 布吉做网站的公司公司网站设计方案
  • 手机网站图片 触摸 放大代码 js黄页88网官网
  • 常用动态网站开发技术长尾关键词挖掘工具
  • 南昌地宝网二手房黑河seo
  • 姚孟信通网站开发中心成免费crm特色