【问题标题】:Is DependcenyProperty always inherited?依赖属性总是继承吗?
【发布时间】:2014-02-07 14:12:30
【问题描述】:

是否存在阻止 DependecyProperty 继承的机制,或者某些值是由某些元素在本地设置的?

我有两个不明白的例子:

<Button Background="AntiqueWhite" Height="40" Width="50" FontSize="10">
   <Button>Test</Button>            
</Button>

<TextBlock Text="Test" Background="AntiqueWhite" Height="40" Width="50" FontSize="10">
        <TextBlock />            
</TextBlock>

在 Button 元素中,子按钮没有继承背景/高度/宽度,但它继承了字体大小,即使所有属性都是 DependencyProperty。

在 TextBlock 元素中情况是一样的,但是我们有另一个 DependencyProperty (Text)。

我了解优先事项的运作方式。本地值比继承的值具有更高的优先级。但是,如果控件自己设置某些东西,我在哪里可以获得信息?或者可能有其他机制阻止某些 DependencyProperties 被继承?

【问题讨论】:

    标签: wpf xaml dependency-properties


    【解决方案1】:

    见这篇文章:http://msdn.microsoft.com/en-us/library/vstudio/ms751554%28v=vs.100%29.aspx

    DependencyPropertiesPropertyMetadata(相关类为FrameworkPropertyMetadata

    所描述的标志之一是Inherits 标志 (http://msdn.microsoft.com/en-us/library/vstudio/system.windows.frameworkpropertymetadata.inherits%28v=vs.100%29.aspx)

    摘录:

    继承。默认情况下,依赖属性不继承值。 OverridesInheritanceBehavior 允许继承路径也 进入可视化树,这是某些控制所必需的 合成场景。注意注意

    在属性值的上下文中,术语“继承”意味着什么 特定于依赖属性;这意味着子元素可以 从父元素继承实际的依赖属性值 因为 WPF 属性的 WPF 框架级功能 系统。它与托管代码类型没有直接关系,并且 成员通过派生类型继承。有关详细信息,请参阅属性 价值继承。

    【讨论】:

    • 是否有任何“简单”的方法来检查这些标志?在您提到的链接中,他们编写了一些代码。我认为这样的信息会显示在 msdn 的每个属性的描述中。
    • @Morfidon 我不直接了解工具,但您应该能够使用反射器查看具有元数据的 FrameworkElement 的来源。例如,免费的是JetBrains dotPeek(它也很酷:))。静态按钮 ctor 会覆盖一些元数据,例如:FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof (Button), (PropertyMetadata) new FrameworkPropertyMetadata((object) typeof (Button)));
    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多