当前位置:首页 > 其他 > 正文内容

【译】为什么命名“它”为依靠特点(DependencyProperty)

邻居的猫1个月前 (12-09)其他703

当咱们创立新的类和成员时,咱们花费了许多的时刻和精力是它们尽可能的好用,好了解,好发现。一般咱们会遵从.Net结构规划攻略,尤其是会不断地研讨这个新类与其他类,未来方案等内容之间的联系。

当命名依靠特点(DependencyProperty)和依靠目标(DependencyObject)的时分也是遵从这个准则,仅仅评论怎么命名,咱们就大约花了几个小时。依靠特点(DPs)终究归结为特点核算和依靠的盯梢。特点核算并不是很特别,许多特点都是这样的,所以DP的本质特征便是依靠的盯梢,因而命名为依靠特点。

这儿有一个比如,实际上是一段示例代码,显现了几个依靠盯梢的比如:

<StackPanel DataContext="Hello, world" TextBlock.FontSize="22">
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Resources>
    <TextBlock Text="{Binding}" />
</StackPanel>

代码示例中TextBlock的特点有不少依靠:

  • TextBlock.Text依靠于绑定(Binding),而这儿的绑定(Binding)依靠于DataContextDataContext是从父元素StackPanel承继下来的,因而,TextBlock.Text也依靠于树的形状;假如TextBlockStackPanel移除,StackPanel的值也会发生变化。
  • TextBlock.FontSize也依靠于树。在这儿,你能够看到它从StackPanel承继。
  • 一切的TextBlock特点都依靠于TextBlock.style。例如,这儿是TextBlock.FontWeight来自款式(Style)。
  • 相同的,TextBlock.Background也依靠款式(Style)。但在这个示例中,它在触发器(Trigger)中设置。所以TextBlock.Background在这种情况下也取决于TextBlock.IsMouseOver

有时,假如编写自己的依靠特点,则需求在盯梢依靠项上做一些辅佐。当需求从头核算特点时,能够经过调用InvalidateProperty来完成,一般是因为在CoerceValueCallback中引用了它。

例如,这儿有一个名为Foo的依靠特点和一个名为FooPlus1的只读依靠特点。FooPlus1仅仅有一个核算“Foo+1”的CoerceValueCallback。因而,Foo有一个PropertyChangedCallback,当Foo发生变化时,它会使FooPlus1失效。

public int Foo
{
    get { return (int)GetValue(FooProperty); }
    set { SetValue(FooProperty, value); }
}

// Using a DependencyProperty as the backing store for Foo.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty FooProperty =
    DependencyProperty.Register("Foo", typeof(int), typeof(Window1), new PropertyMetadata(FooChangedCallback));



static void FooChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs args)
{
    // Whenever Foo changes, we need to invalidate FooPlus1, so that
    // the DependencyProperty system knows to update it (call its
    // CoerceValueCallback again).
    (d as Window1).InvalidateProperty(Window1.FooPlus1Property);
}

        
public int FooPlus1
{
    get { return (int)GetValue(FooPlus1Property); }
}

static readonly DependencyPropertyKey FooPlus1PropertyKey =
    DependencyProperty.RegisterReadOnly("FooPlus1", typeof(int), typeof(Window1), new PropertyMetadata(0, null, CoerceFooPlus1Callback));

static readonly DependencyProperty FooPlus1Property = FooPlus1PropertyKey.DependencyProperty;

static object CoerceFooPlus1Callback(DependencyObject d, object baseValue)
{
    return (d as Window1).Foo + 1;
}

原文链接:https://learn.microsoft.com/en-us/archive/blogs/mikehillberg/why-is-it-called-a-dependencyproperty

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=730

标签: WPF
分享给朋友:

“【译】为什么命名“它”为依靠特点(DependencyProperty)” 的相关文章

Open3D 纲要

Open3D 纲要

Open3D 纲要 open3d用于 3D 数据处理的现代库。 简介 Open3D 是一个开源库,支撑快速开发处理 3D 数据的软件。Open3D 前端公开了一组精心选择的 C++ 和 Python 数据结构和算法。后端经过高度优化,并设置为并行化。Open3D 是从零开始开发的,具有一更小的经过...

DirectX9(D3D9)游戏开发:高光时间录制和同享纹路的踩坑

DirectX9(D3D9)游戏开发:高光时间录制和同享纹路的踩坑

同享纹路 老游戏运用directx9无法直接与cc高光sdk(d3d11)对接,可是d3d9ex有同享纹路,咱们经过同享纹路把游戏画面同享给cc录制,记载一些踩坑的笔记。 同享纹路示例: // 初始化Direct3D void initD3D9(HWND hWnd) { hr = d3d9e...

聊一下怎样十分钟速水CVE

聊一下怎样十分钟速水CVE

标题是真的。这几天刚触摸关于CVE的审计和提交。只能说:牛逼的是真牛逼,水的是真水。 我接下来教你,怎样在10分钟里找到一个CVE的中危缝隙而且提交。然后你就能够去咸鱼接单了,一个一铂快 翻开https://code-projects.org/ 随机找一个水项目 翻开网站,点击言语,挑选PHP。咱们...

SQL注入中二阶注入原理

SQL注入中二阶注入原理

1.sql注入中二阶注入原理?. 二阶注入是用户输入被存储后(如数据库或文件),再次被读取并输入到sql查询语句中,然后导致注入进犯。 1.刺进歹意数据,进行数据库刺进数据时,对特别字符进行了转义处理,在写入数据库时保留了本来的数据。 2.引证歹意数据,开发者默许存入数据库的数据都是安全的,进行查询...

云计算啥意思, 云计算是什么?

云计算啥意思, 云计算是什么?

云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。云计算的核心思想是将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务。云计算通常涉及通过互联网来提供动态易扩展...

大数据与云计算论文,融合与创新的时代浪潮

大数据与云计算论文,融合与创新的时代浪潮

1. 大数据与云计算 豆丁网 这篇文章介绍了大数据的特征、作用以及对大数据分析的方法理论。文章还分析了大数据的两种处理模式、处理流程以及关键技术,并提出了MapReduce与关系数据库融合技术,为未来大数据的工作提供了一个参考。2. 云计算和大数据技术发展现状与趋势 百度学术 本文主...