获取附加属性继承以进行传播

gir*_*iri 3 wpf inheritance dependency-properties

我无法将附加的属性值从树中从父级传播到可视层次结构中的子级.设置如下:

我有一个实例化Viewport3D的自定义面板.然后,Panel处理添加和删除的子项,以便为每个子项创建和添加继承的Visual3D类.

我试图声明一个名为AttachedToggle属性的附加属性.我希望将此属性驻留在名为AttachedToggle的外部所有者类中,该类实现单个附加依赖项属性IsChecked,并允许父Panel或任何子Visual3D元素能够更改值并具有其他元素的实例价值反映了变化.Panel和Visual3D类都不是从公共基础继承的.可以这样做吗?

我可以使用Set/GetValue从应用程序代码中成功更改IsChecked的父实例和子实例值,但无法进行传播更改.

Phi*_*eck 16

根据Property Value Inheritance的文档,这应该可以正常工作.确保您注册该物业的电话如下:

public static readonly DependencyProperty IsChecked = 
    DependencyProperty.RegisterAttached(
    "IsChecked",
    typeof(Boolean),
    typeof(AttachedToggle),
    new FrameworkPropertyMetadata(false, 
        FrameworkPropertyMetadataOptions.Inherits)
  );
Run Code Online (Sandbox Code Playgroud)

- Inherits标志.请参阅文档FrameworkPropertyMetadata(以及FrameworkPropertyMetadataOptions- OverridesInheritanceBehavior如果需要,您也可以使用).

  • 如果事情总是根据文档工作.是的,在DP上设置了FrameworkPropertyMetadataOptions.Inherits.但仍未按预期工作. (3认同)

Dea*_*alk 0

我不确定附加属性会沿着逻辑树传播,但您可以尝试如下操作:

<Panel a:ToggleSwitch="Binding Path=(a:ToggleSwitch), 
           RelativeSource={RelativeSource Mode=FindAncestor, 
           AncestorType={x:Type Panel}}" />
Run Code Online (Sandbox Code Playgroud)