1

我正在使用System.Windows.Documents命名空间中的类,尝试编写一些通用代码,这些代码将有条件地设置某些依赖项属性的值,具体取决于这些属性是否存在于给定类中。

例如,以下方法为Padding传递的属性分配任意值FrameworkContentElement

void SetElementPadding(FrameworkContentElement element)
{
    element.SetValue(Block.PaddingProperty, new Thickness(155d));
}

然而,并不是所有的具体实现FrameworkContentElement都有一个Padding属性(Paragraph有但Span没有),所以我希望属性分配对于实现这个属性的类型会成功,而对于没有的类型会被忽略。

但似乎上述属性分配对于 的所有派生实例都成功FrameworkContentElement,无论它们是否实现该Padding属性。我做出这个假设是因为我总是能够读回分配的值。

我认为我分配属性值的方式存在一些缺陷。我应该怎么做才能确保给定的依赖属性分配被不实现该属性的类忽略?

非常感谢您的建议。

蒂姆

4

1 回答 1

1

从 Block 派生的所有类都具有 Padding 属性。您可以使用以下修改:

void SetElementPadding(FrameworkContentElement element)
{
    var block = element as Block;
    if (block == null) return;

    block.Padding = new Thickness(155d);
}

即使没有这个修改,一切仍然对你有用,因为你想要的只是 Padding 被不支持它的类忽略。这正是会发生的事情。您可以在不支持它的实例上读取 Padding 依赖属性的值这一事实可能是设计使然,但您不应该关心。块和衍生品将尊重该价值,而所有其他人将忽略它。

于 2010-04-23T09:49:28.093 回答