2010-07-16 5 views
0

Essayer de créer ma propre propriété jointe personnalisée pour un objet DependencyObject WPF n'a pas réussi à faire ce que je voulais faire, et je suis un peu inquiet de ne pas avoir complètement compris le concept WPF.AttachedProperty ne se propage pas aux enfants?

J'ai fait une classe de test très simple pour montrer où se situe mon problème. De the MSDN Documentation, je copiais

public class TestBox : TextBox 
{ 
    public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
      "IsBubbleSource", 
      typeof(Boolean), 
      typeof(TestBox) 
      ); 
    public static void SetIsBubbleSource(UIElement element, Boolean value) 
    { 
     element.SetValue(IsBubbleSourceProperty, value); 
    } 
    public static Boolean GetIsBubbleSource(UIElement element) 
    { 
     return (Boolean)element.GetValue(IsBubbleSourceProperty); 
    } 
    public Boolean IsBubbleSource 
    { 
     get 
     { 
      return (Boolean)GetValue(IsBubbleSourceProperty); 
     } 
     set 
     { 
      SetValue(IsBubbleSourceProperty, value); 
     } 
    } 
} 

Maintenant, plaçant mon nouveau et funky TextBox dans une grille comme celui-ci

<Grid vbs:TestBox.IsBubbleSource="true"> 
    <vbs:TestBox x:Name="Test" Text="Test" >      
    </vbs:TestBox> 
</Grid> 

Je pensais chaque enfant qui ne se définit pas la propriété IsBubbleSource à « hériter » à partir sa grille parentale. Ça ne fait pas ça; un MessageBox.Show(Test.IsBubbleSource.ToString()) montre "faux". La propriété attachée est définie sur true. J'ai vérifié cela en utilisant un gestionnaire d'événement OnPropertyChanged. Ai-je manqué quelque chose?

Merci!

Répondre

2

Par défaut, les propriétés attachées ne sont pas héritées. Vous devez le spécifier lorsque vous définissez la propriété:

public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
    "IsBubbleSource", 
    typeof(Boolean), 
    typeof(TestBox), 
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits) 
    ); 
+0

Oui, c'est tout. Merci! Je me demande à quoi ils servent s'ils ne sont pas hérités ... – Jens

Questions connexes