绑定到特定的 AncestorType,跳过派生类型

Bind to specific AncestorType, skipping derived types

我用的是DevExpressLayoutGroup,它构造了多个children我没有影响。 LayoutGroup 有一个 IsCollapsible 属性,当它为 true 时,添加一个按钮到组的 header 和 collapsing/expanding 组内容的功能。

构建的可视化树如下所示:

[LayoutControl]
  CollapsibleNavigationGroup [LayoutGroup]
    [GroupBox]
      [Container]
        BorderElement [Border]
          [LayoutControl]
            TitleElement [Container]
              TitleContent [LayoutControl]

这通常只在单击按钮本身时有效,但我将功能扩展到单击 header。现在,如果 GroupBox 是可折叠的,我希望光标在悬停在 header 上方时变为一只手,所以我在其模板中这样做:

<dxlc:LayoutControl x:Name="TitleContent"
                    Cursor="{Binding IsCollapsible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dxlc:LayoutGroup}}, Converter={StaticResource BoolToCursorConverter}}">

但是,LayoutControl 派生自 LayoutGroup,因此 FindAncestor 实际上并没有找到我的 CollapsibleNavigationGroup,而是元素的 grand-parent,无名的 LayoutControl。现在我想知道,有没有什么方法可以告诉相对源绑定实际查找这个确切的类型并忽略任何派生类型?

Now I wonder, is there any way to tell the relative source binding to actually look for this exact type and ignore any derived types?

不,没有。但是你可以设置 AncestorLevel 属性 到 2 来跳过 AncestorType 属性 指定类型的第一个祖先,例如:

<dxlc:LayoutControl ... Cursor="{Binding IsCollapsible, RelativeSource={RelativeSource Mode=FindAncestor, 
                        AncestorType={x:Type dxlc:LayoutGroup}, 
                        AncestorLevel=2}, Converter={StaticResource BoolToCursorConverter}}">