属性 值继承在 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 个问题,
TextBlock 的背景未在文本块级别设置,但它从父 Stackpanel 获取值。同样,它从 stackpanel 中获取宽度为 200,但高度未设置为 200,为什么?
由于没有设置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.
根据 MSDN,属性 值继承使元素树中的子元素能够从父元素获取特定 属性 的值,继承该值最近的父元素。
请在下面找到示例
<Grid Width="300" >
<Border BorderThickness="1">
<StackPanel Width="200" Height="200" Background="AliceBlue">
<TextBlock />
</StackPanel>
</Border>
</Grid>
我对上面提到的例子有 2 个问题,
TextBlock 的背景未在文本块级别设置,但它从父 Stackpanel 获取值。同样,它从 stackpanel 中获取宽度为 200,但高度未设置为 200,为什么?
由于没有设置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.