找到具有特定属性的最近的祖先



是否有一种方法可以将Style中的属性设置器值绑定到为该属性提供值的最近的父节点?例如,如果我有以下层次结构:

Window> Grid> GroupBox> Grid> TextBox

和我写下面的Style:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Visibility" >
        <Setter.Value>
            <Binding Converter="{StaticResource TagToVisibilityConverter}"
                     RelativeSource="{RelativeSource AncestorType=Window}" Path="Tag" />
            </Binding>
        </Setter.Value>
    </Setter>
</Style>

这将简单地转到顶级父(Window)并获取Tag属性。我想要的是搜索最近的使用Tag属性的父级,例如,在上面的层次结构中,如果UserControl指定Tag, GroupBox也是如此,它应该从GroupBox获取值。我在想一些聪明的使用AncestorLevel,但它看起来不会那么直接。什么好主意吗?

我认为属性值继承是你需要的。根据文章,

若要使属性参与值继承,请创建自定义附加属性,如如何:注册附加属性中所述。用元数据(FrameworkPropertyMetadata)注册属性,并在该元数据的选项设置中指定"Inherits"选项。还要确保该属性具有已建立的默认值,因为该值现在将被继承。

如果你想要更特别的东西,你可以编写你自己的标记扩展,它将使用VisualTreeHelper类遍历WPF可视化树并查找你需要的元素。

您可以检查第一个FrameworkElement,因为FrameworkElement是包含Tag属性的类。

RelativeSource="{RelativeSource AncestorType=FrameworkElement}" Path="Tag"

相关内容

  • 没有找到相关文章

最新更新