属性 值继承在 WPF 中如何工作?

How does property value inheritance work in WPF?

根据 MSDN,属性 值继承使元素树中的子元素能够从父元素获取特定 属性 的值,继承该值最近的父元素。

请在下面找到示例

<Grid Width="300" >
                <Border BorderThickness="1">
                <StackPanel Width="200"  Height="200" Background="AliceBlue">
                    <TextBlock />
                </StackPanel>
                </Border>
            </Grid>

我对上面提到的例子有 2 个问题,

  1. TextBlock 的背景未在文本块级别设置,但它从父 Stackpanel 获取值。同样,它从 stackpanel 中获取宽度为 200,但高度未设置为 200,为什么?

  2. 由于没有设置TextBlock的Text 属性,会不会在Stackpanel,Border,Grid等父类中寻找呢?我找不到在面板级别设置文本 属性 值的机制。

依赖项 属性 值优先级为 well documented

1) 控件的大小不是继承的,它是measured根据父级的大小(可用大小)和显示内容所需的大小

2) 为此,您必须在附加的 属性 声明中使用 FrameworkPropertyMetadata.Inherits 选项。此外,只有附加的 DP 才能具有继承值:

Although property value inheritance might appear to work for nonattached dependency properties, the inheritance behavior for a nonattached property through certain object-object divisions in the runtime tree is undefined. Always use RegisterAttached to register properties where you specify Inherits in the metadata.