我无法将附加属性值从树中的父级传播到可视层次结构中的子级。设置如下:
我有一个实例化Viewport3D的自定义面板。然后,Panel处理添加和删除的子项,以便为每个子项创建和添加继承的Visual3D类。
我正在尝试声明一个名为AttachedToggle属性的附加属性。我希望将此属性驻留在名为AttachedToggle的外部所有者类中,该类实现单个附加依赖项属性IsChecked,并允许父Panel或任何子Visual3D元素能够更改值并具有其他元素的实例价值反映了变化。 Panel和Visual3D类都不是从公共基础继承的。可以这样做吗?
我可以使用Set / GetValue从应用程序代码中成功更改IsChecked的父实例和子实例值,但无法进行传播更改。
答案 0 :(得分:16)
根据Property Value Inheritance上的文档,这应该可以正常工作。确保您注册该物业的电话如下:
public static readonly DependencyProperty IsChecked =
DependencyProperty.RegisterAttached(
"IsChecked",
typeof(Boolean),
typeof(AttachedToggle),
new FrameworkPropertyMetadata(false,
FrameworkPropertyMetadataOptions.Inherits)
);
- 指出Inherits
标志。请参阅FrameworkPropertyMetadata
的文档(以及FrameworkPropertyMetadataOptions
- 如果需要,您也可以使用OverridesInheritanceBehavior
。
答案 1 :(得分:0)
我不确定附加属性是否在逻辑树中传播,但您可以尝试这样的事情:
<Panel a:ToggleSwitch="Binding Path=(a:ToggleSwitch),
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Panel}}" />