2010-11-22 36 views
3

我无法从附加属性值向下传播树从父级到视觉层级中的子级。设置如下:获取附属属性继承以传播

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

我想声明一个名为AttachedToggle属性的附加属性。我想让这个属性驻留在一个名为AttachedToggle的外部所有者类中,该类实现了单个附加的依赖项属性IsChecked,并允许父面板或任何子Visual3D元素都能够更改该值并使其他元素的实例数值反映了这种变化。 Panel和Visual3D类都不从共同的基础继承。这可以做到吗?

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

+0

当您执行RegisterAttached时,您是否在元数据中包含Inherits选项? http://msdn.microsoft.com/en-us/library/ms753197.aspx – 2010-11-22 19:41:40

回答

1

林不知道该附加属性传播完成下来的逻辑树,但你可以尝试这样的事:

<Panel a:ToggleSwitch="Binding Path=(a:ToggleSwitch), 
      RelativeSource={RelativeSource Mode=FindAncestor, 
      AncestorType={x:Type Panel}}" /> 
+2

这将是更昂贵的性能明智。 – 2013-01-12 22:40:55

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)。

+3

如果只有东西总是按照文档工作。是的,FrameworkPropertyMetadataOptions.Inherits在DP上设置。但仍然没有按预期工作。 – giri 2011-02-22 09:11:50