2010-11-22 34 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