依赖属性如何告诉要应用的对象?

2024-04-15

(我对这个概念完全陌生,所以我可能会问非常基本的问题。)

使用以下代码注册依赖属性:

public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata);

从逻辑上讲,它只是将属性名称与所有者类型相关联。

因此,如果我有所有者类型的多个实例,并且每个实例将 DP 设置为不同的值。

如何存储这些值?

更新 1 - 2013 年 10 月 30 日上午 10:04

我从这里读到了有关附加财产的信息:http://wpftutorial.net/DependencyProperties.html http://wpftutorial.net/DependencyProperties.html

附加属性

附加属性是一种特殊的 DependencyProperties。他们 允许你将一个值附加到一个什么都不知道的对象上 关于这个值。

这个概念的一个很好的例子是布局面板。每个布局面板 需要不同的数据来对齐其子元素。画布需要顶部 左图,DockPanel 需要 Dock 等。因为您可以编写自己的 布局面板,列表是无限的。所以你看,这是不可能的 所有 WPF 控件都具有所有这些属性。

解决方案是附加属性。它们由控件定义 需要特定上下文中另一个控件的数据。为了 例如,由父布局面板对齐的元素。

所以在下面的代码片段中:

<Canvas>
    <Button Canvas.Top="20" Canvas.Left="20" Content="Click me!"/>
    <Button Canvas.Top="40" Canvas.Left="20" Content="Click me!"/>
</Canvas>

显然我们不能给出所有的对齐属性,例如Top, Left到按钮。所以 Canvas 定义了这样的属性,它们是“attached” 到按钮控件。

当 Canvas.Top 在 XAML 中被指定为 Button 的“属性”时,它将调用 Canvas 类型中定义的 SetTop() 方法。并且 Button 作为元素参数传入。我认为这就是 Canvas 知道哪个 Button 使用哪个 Top 值的方式。

public static void SetTop(UIElement element, double length);

但我不明白为什么附加属性必须是依赖属性?他们之间有什么联系呢?

Thanks!


通常当我们定义一个DependencyProperty,我们还定义了一个 CLR“包装器”,使我们能够使用DependencyProperty在代码中:

public static readonly DependencyProperty ItemsProperty = DependencyProperty.Register(
    "Items", typeof(ObservableCollection<string>), typeof(MainWindow), 
     new UIPropertyMetadata(new ObservableCollection<string>()));

public ObservableCollection<string> Items
{
    get { return (ObservableCollection<string>)GetValue(ItemsProperty); }
    set { SetValue(ItemsProperty, value); }
}

在这里你可以看到GetValue and SetValue@Clemens 正在谈论的方法。我们可以在a中访问这些方法Window and/or UserControl因为它们都扩展了DependencyObject班级。您还可以看到Items这里的属性是not static...这只是定义DependencyProperty那是static.


更新>>>

询问并没有多大意义为什么附加财产必须是DependencyProperty?因为在 .NET 中,它们只是……它们就是这样设计的。更好的问题可能是,附属财产可以从成为附属财产中获得什么好处DependencyProperty?

答案与提问时的答案相同财产可以从成为一个财产中获得什么好处DependencyProperty?主要好处是这些属性可用于Bindings, Styles, Animations and Resources除其他事项外。对于任何 WPF 开发人员来说,可以从 MSDN 上的两个非常重要的页面(已在评论中链接到)中找到更多详细信息:

依赖属性概述 http://msdn.microsoft.com/en-us/library/ms752914%28v=vs.110%29.aspx

附加属性概述 http://msdn.microsoft.com/en-us/library/ms749011%28v=vs.110%29.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

依赖属性如何告诉要应用的对象? 的相关文章

  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 从 WPF 绑定列表框中删除项目

    我有一个带有 ListBox 称为 listMyItems 的 WPF 应用程序 它已成功绑定到我创建的 MyItems 类 我有一个名为 currentMyItems 的 MyItems 列表 然后将其作为 ItemSource 分配给
  • WPF鼠标按下事件没有坐标

    我在控件上使用 WPF 鼠标按下事件 我想获取 X Y 坐标 但出现错误 private void button MouseDown object sender MouseButtonEventArgs e double x e X dou
  • WPF 网格布局

    是否可以在 WPF 中使用 Grid 来设计类似的东西 设计列很容易 但是行呢 或者有没有更好的解决方案 比如另一个容器 将每个矩形想象为模块 GroupBox 创建一个包含两列的外部网格 在此网格中 放置另外两个网格 每列一个 这将导致所
  • WPF DataGridTemplateColumn 标题绑定不起作用

    我将 DataGrid 与一些手动创建的 DataGridTemplateColumns 一起使用 这是工作中的代码片段
  • 在 WPF 中打开 ContextMenu 时保留 DataGrid IsSelectionActive?

    我有一个DataGrid其风格为IsSelectionActive 然而 一旦ContextMenu打开 网格丢失IsSelectionActive在用户看来 上下文菜单似乎以某种方式进行了选择 可能会让用户感到困惑 有没有办法保留IsSe
  • WPF XAML 绑定和 CurrentCulture 显示

    当 CurrentCulture 更改时 我发现 XAML 文档出现一些无效行为 当我在窗口中有一些这样的元素时
  • Caliburn micro 处于无应用程序对象模式,就像在 AutoCAD dll 插件中一样

    我正在使用 Caliburn Micro 开发 WPF 应用程序 该应用程序的一些视图需要加载到 AutoCAD 环境中 AutoCAD 编程环境允许开发 AutoCAD 插件 dll 类型 并将其加载到 AutoCAD 环境中 由于 Au
  • 我可以将这个 XAML 块变成可重用的“控件”吗?

    我有一个Grid 在那个网格中 我有这个
  • 需要帮助处理 Application.xaml 文件中的 DataTemplate 事件

    我的应用程序中有一个包含几个按钮的数据模板 我希望这些按钮的偶数处理程序在当前页面 我在许多页面中使用此模板 而不是在 Application xaml vb cs 文件中触发 因为我希望在每个页面上执行不同的操作 我希望我说清楚了 您可以
  • 我可以将一个 WPF 窗口叠加在另一个窗口之上吗?

    我有一个 WPF 窗口 其中包含一个WindowsFormsHost元素 我需要在这个元素之上绘制东西 但是它的本质WindowsFormsHost意味着它始终位于绘图堆的顶部 因为我无法在同一 WPF 窗口中绘制WindowsFormsH
  • ScrollViewer.ScrollToBottom 未完全滚动

    我创建了一个 WPF 控件 它允许我正在开发的应用程序的用户轻松选择要连接的 SQL Server 在控件上 存在三种不同类别的 SQL Server 本地 最近和网络上的更多服务器 Local 运行应用程序的计算机上的 SQL Serve
  • 何时引发 Window.SourceInitialized 事件

    我能保证Window SourceInitialized事件总是会在Window Loaded事件 我需要HwndSource在我的中进一步处理的对象Window Loaded 事件处理程序我不确定到那时这是否总是可用 以下是您可以预期的事
  • Wpf ICollectionView 绑定项无法解析类型对象的属性

    我已经绑定了一个GridView与ICollectionView在 XAML 设计器中 属性是未知的 因为CollectionView已转化为类型Object并且无法访问实体属性 它运行良好 没有错误 但设计器将其显示为错误 如果我绑定到集
  • WPF:窗口设置边界

    我在 Windows Forms 中使用 SetBounds 方法而不是 Left Top Width Height 属性分配 因为每次我分配更改位置属性的值时 窗口都会更改其位置 Left Top Width Height 赋值导致窗口移
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 默认转换器何时启动?

    使用以下代码 虽然 Text 属性绑定到 DateTime 源属性 但我注意到 WPF 似乎会自动将文本转换为 DateTime 而无需我编写 ValueConverter 有人可以解释一下这是如何完成的吗
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • 与 wpf ComboBox DisplayMemberPath、SelectedValue 和 SelectedValuePath 混淆

    我一直在努力解决这些组合框属性 显示成员路径 选定值 选定的值路径 我正在构建一个主详细信息表单 组合框中充满了客户 用户在组合中选择客户 所有文本框 EG 均正确填写 我遇到的问题是我已经让它工作了 但我不理解这些属性和差异 有没有一个很
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW

随机推荐

  • 如何在 Tensorflow 2.0 中使用嵌入投影仪

    随着 tf contrib 模块从 Tensorflow 中消失 并且 tf train Saver 也消失 我无法找到一种方法来存储一组嵌入及其相应的缩略图 以便 Tensorboard Projector 可以读取它们 The 张量板文
  • 与编程语言/API 相关的常用“语义”的简单定义?

    今天我突然想到 虽然我在提到语言元素和命名约定时已经采用并且不经常使用 语义 一词 但我对正式定义没有任何感觉 我试图在编程领域找到一个正式的定义 http en wikipedia org wiki Formal semantics of
  • 为什么鼠标滚轮事件的目标属性与其他(click、mousedown、touchstart)事件的目标属性不同?

    鼠标滚轮事件target属性提供在操作鼠标滚轮 或支持手势的触摸板 时鼠标当前悬停在其上的 DOM 元素 当我这样做时 至少在 Safari 6 中 我稍后会测试其他浏览器 我将得到文本节点本身target 即使我直接在文本上执行操作 其他
  • 首先是 DDD 数据库。如何处理聚合

    我正在尝试学习 DDD 的概念 我做了一个项目 我使用数据库优先方法 在基础设施中 我添加了一个 edmx 文件 我选择自动生成实体 现在在 域 中我正在尝试创建聚合 但在这里我遇到了一些问题 我正在尝试创建一个名为 User 的聚合 但
  • 如何为这个业务逻辑代码编写可靠的单元测试?

    我有一些想要测试的业务逻辑代码 目前我只知道如何对没有其他依赖项的逻辑代码编写单元测试 有人能给我指出如何测试这个函数的好方向吗 也许可以举个例子 测试这个的唯一方法是集成测试还是我必须使用模拟 存根
  • 安装旧版本的 gcc [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想在我的 Ubuntu 64 位系统上安装 gcc 4 1 2 该系统当前有 gcc 4 4 我想继续使用当前的 gcc 但也想添加 gcc 4 1
  • Swagger - 时间戳奇怪的表示

    我有 Spring Boot 控制器 为了方便 API 参考 我使用了 Swagger 关于问题timestamp 为什么在生成的文档示例中看起来像 timestamp date 0 day 0 hours 0 minutes 0 mont
  • UWP 网格填充父窗口

    我们正在进行一个学校项目 但陷入了死胡同 我们正在努力使grid填充整个父窗口 但我们根本无法这样做 This is what the designer shows and how we want it to look And this i
  • 如何从 Twitter Bootstrap 和 Bloodhound 建议中获取 id 和 value?

    选择建议时如何从 typeahead js 获取 id 和 value 我有一个 json 如下 id 1 name paul id 2 name jim id 3 name tom id 4 name medor id 5 name ja
  • Maven jdepend 循环构建失败

    当包循环存在时 有没有办法使用 maven 中的 jdepend 插件来使构建失败 我知道你可以用 ant 很容易地做到这一点 但我还没有弄清楚如何用 Maven 做到这一点 谢谢 杰夫 根据已接受的答案 我改进了性能和日志输出 并将其发布
  • 为什么 CompareTo 这么短地实现?

    考虑以下代码 namespace ConsoleApplication1 class Program static void Main string args Console WriteLine 100 CompareTo 200 prin
  • 如何获取启动进程的命令行

    从 Java 中 是否可以获得包含启动应用程序的所有参数的完整命令行 System getEnv and System getProperties 似乎不包含这些值 其中一些可以从 RuntimeMXBean 获得 通过调用获得Manage
  • Jenkins 管道到 Excel 电子表格

    我有一个每天运行 sql 计数的管道 作为回归测试的一部分 我希望能够将每个构建的结果导出到一个 excel 文档中 在其中可以存储和比较结果 这可能吗 提前致谢 None
  • 解析 JSX 文件以提取 Import 语句的属性

    有一个 jsx 文件 其中包含内容
  • 使用 T-SQL 通过游标导航存储过程的结果

    由于遗留的报告生成系统 我需要使用游标来遍历存储过程的结果集 系统通过打印结果集中每一行的数据来生成报告输出 重构报告系统远远超出了这个问题的范围 据我所知 DECLARE CURSOR 语法要求其源是 SELECT 子句 但是 我需要使用
  • 当前缓冲区的议程视图

    编辑 解决方案很简单 但对于任何可以解释为什么我的方法不起作用的人来说都是 加分 原点 我想要一个 org mode custom command 来显示仅从当前缓冲区创建的议程 以下代码片段显示了我想要的视图类型 setq org age
  • 在 mysql 中使用 TCP/IP 上的 Unix 套接字有什么合法的理由吗?

    我试图弄清楚为什么 mysql 默认使用 Unix 套接字 tmp mysql sock 而不是普通的 TCP IP 套接字 这看起来不像是一个安全问题 因为你只能在 127 0 0 1 上监听 这应该同样安全 套接字文件是世界上可写的 所
  • 如何使用 C# 在 Windows 上存储和检索凭据

    我构建了一个要在 Windows 10 上运行的 C 程序 我想只需按一个按钮即可从该程序发送电子邮件 计算结果 我把from 电子邮件地址和subject 等 但我不想在程序中的任何地方放置明文密码 并且我不希望用户每次发送邮件时都必须输
  • 如何通过WMI确定操作系统平台?

    我试图弄清楚 WMI 中是否有一个位置可以返回可在 所有 版本的 Windows 上工作的操作系统架构 即 32 位或 64 位 当我发现以下内容时 我以为我已经弄清楚了我的Win2k8系统 Win32 OperatingSystem OS
  • 依赖属性如何告诉要应用的对象?

    我对这个概念完全陌生 所以我可能会问非常基本的问题 使用以下代码注册依赖属性 public static DependencyProperty Register string name Type propertyType Type owne