【问题标题】:How does property value inheritance work in WPF?属性值继承在 WPF 中如何工作?
【发布时间】:2016-10-20 23:13:14
【问题描述】:

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

请在下面找到示例示例

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

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

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

  2. 由于 TextBlock 的 Text 属性未设置,它会在 Stackpanel、Border、Grid 等其父项中寻找它吗?我找不到在面板级别设置 Text 属性值的机制。

【问题讨论】:

    标签: wpf xaml inheritance data-binding routed-events


    【解决方案1】:

    依赖属性值优先级为well documented

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

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

    虽然属性值继承似乎对非附加依赖属性有效,但通过运行时树中的某些对象-对象划分对非附加属性的继承行为是未定义的。始终使用 RegisterAttached 来注册您在元数据中指定 Inherits 的属性。

    【讨论】:

    • 继承的属性是什么。是不是只有大小不被继承?
    • 如果您正在查看附加属性的详尽列表,我将无法提供该列表
    • 感谢您的回答。甚至背景属性也不会被继承,在statckpanel中输入TextBlock.[PropertyName]后显示的所有属性都会被继承。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2017-12-18
    • 1970-01-01
    • 2010-10-05
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多