2010-12-16 64 views
2

從屬性更改回調中獲取附屬屬性的實例是否有附屬屬性類型?從依賴項屬性更改回調中獲取附加屬性實例

換句話說,如果您有:

public class MyAttachedPropertyClass 
{ 
     public static readonly DependencyProperty MyProperty = DependencyProperty.RegisterAttached(
     "My", typeof(int), typeof(MyAttachedPropertyClass), new FrameworkPropertyMetadata(0, OnMyPropertyChanged)); 

private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     //TODO: access instance of MyAttachedPropertyClass 
    } 
} 

我需要訪問MyAttachedPropertyClass的實例,這樣我可以設置另一個屬性坐在類型的值。

+0

不知道我明白你想做什麼。你能再詳細一點嗎? – 2010-12-16 14:16:08

+0

我在MyAttachedPropertyClass上有一個基於實例的字段,我需要將OnMyPropertyChanged中該字段的值設置爲e.NewValue的整數值。由於OnMyPropertyChanged是靜態的,我無法在靜態上下文中訪問此實例字段。 – devdigital 2010-12-16 14:19:47

+1

我不確定我是否理解了你的問題,或者你想要做什麼,但是如果你只需要屬性發生變化的對象實例(我最好猜測你到底是什麼意思),那就是你的' DependencyObject d'參數。 – 2010-12-16 22:43:22

回答

2

通常,至少在我的經驗中,屬性所屬的類型是靜態的。如果不是靜態的,那麼在設置附加屬性時,將不會實例化擁有類型的實例。如果這就是你真正想要的,那麼你將不得不做更多的工作。

本質上,你需要自己在某個時刻實例化實例,然後通過你的OnMyPropertyChanged訪問實例,可能通過某種靜態。

我並不確切地知道你要達到的目標,但作爲替代方案,您可以在OnMyPropertyChangedDependencyObjectd」中設置其他附屬屬性。所以,如果你想要保持某種狀態,你可以把它放在另一個附屬的屬性中。

在我看來,在這一點上,MyAttachedPropertyClass可能是一種使用諸如GridDockPanel等附屬屬性的控件。在這種情況下,MyAttachedPropertyClass可能是DependencyObjectd」的父代,您可以使用VisualTreeHelper類訪問它。

在這一點上,我只是在黑暗中拍攝答案。如果您有關於您想要做什麼的更多詳細信息,我可能會爲您提供更多幫助。