从不相关的类中“借用”依赖属性是否可以接受?

时间:2008-10-22 18:34:26

标签: wpf dependency-properties

我正在编写一个在WPF中呈现某些内容的类,我想让用户控制内容的呈现方式。渲染主要是描边线,所以我决定查看System.Windows.Forms.Shapes.Line类,以了解我可能想要实现的属性。这导致我实现了大多数StrokeXXXX属性,并且由于每个都需要元数据来影响渲染,所以这是很多苦差事。

一位同事建议我只是“借用”Shape中的属性:

Shape.StrokeThicknessProperty.AddOwner(typeof(MyType));

这似乎是个不错的主意。我认为通过这样做,我将失去设置强制和属性更改回调的能力,但看起来像PropertyMetadata的重载允许这样做。我能看到的唯一缺点是如果Shape的实现发生了变化,它会影响我们的类,但是我不确定我多久会期望.NET接口发生重大变化。

你怎么看?当一个着名的类具有你想要的行为和一个稳定的界面,或者在汽油浴中玩火时,这是一个很好的定义属性的快捷方式吗?

2 个答案:

答案 0 :(得分:4)

借用DP是非常安全和有用的...阅读WPF博士关于该主题的following帖子!

以下是他提供的一些“提示”:

  • 您应该始终知道所有者类对您借用的任何财产所做的事情。
  • 您应该注意默认值和继承。有时您需要一个默认值为true的bool属性...其他时候您可能需要默认值false。有时你需要一个继承的属性......有时你明确地不想继承。 (借用像TextElement.FontSize这样的属性可能真的搞砸了树中较低的东西。)
  • 所有者类有时可能会定义一个PropertyChangedCallback,它会干扰您根据需要使用该属性的能力。始终知道所有者类对该物业的影响。
  • 所有者类可以为属性提供一个验证例程,阻止您输入要指定的值。同样,始终知道所有者类对该属性的作用。 该属性可能以一种使其成本高昂的方式进行注册,例如FixedPage.Bottom,它会在对象的属性更改时使父进程的排列无效。有时您可能明确地想要这种行为......有时候它会不必要地导致布局传递。同样,始终知道所有者类对该属性的作用。
  • 如果您在框架本身试图使用该属性的场景中使用属性(例如ItemsControl上的TextSearch.TextPath),您可能会发现自己与框架争用。

答案 1 :(得分:1)

我只是继续创建自己的依赖属性。这真的不是多余的工作,然后你不必担心任何可能的警告。