2010-10-15 17 views
0

MS définit les propriétés attachées comme 'Grid.RowProperty' et 'Grid.ColumnProperty', mais en XAML vous l'appelez simplement avec 'Grid.Row' et 'Grid.Column'Propriétés jointes dans XAML sans le mot 'Propriété'

J'ai essayé de faire la même chose avec une propriété attachée appelée 'MyValProperty' qui était enregistrée avec le nom 'MyVal' sur la classe 'Foo', mais le XAML ne me laisse pas taper 'Foo.MyVal' et me fait plutôt tapez 'Foo.MyValProperty' Comment MS fait-elle cela? Qu'est-ce que je rate?

+1

pouvez-vous pls partager l'extrait de code ...? –

Répondre

2

Comme fond est ici comment register an attached property

public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
    "IsBubbleSource", 
    typeof(Boolean), 
    typeof(AquariumObject), 
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender) 
); 
public static void SetIsBubbleSource(UIElement element, Boolean value) 
{ 
    element.SetValue(IsBubbleSourceProperty, value); 
} 
public static Boolean GetIsBubbleSource(UIElement element) 
{ 
    return (Boolean)element.GetValue(IsBubbleSourceProperty); 
} 

Vous pouvez également utiliser un format de propriété standard plutôt que le Set/Get construire. C'est l'un de ces domaines où WPF a une convention forte en place. Il y a trois parties d'un AttachedProperty (ou DependencyProperty). La première est l'enregistrement de la propriété avec DependencyProperty.RegisterAttached et la valeur de retour doit être définie sur une variable statique publique nommée [Property Name] Property. La seconde est que le premier argument lors de l'enregistrement de votre propriété doit être "[Nom de la propriété]". Et le troisième est le Get/Set méthodes que vous utiliserez pour interagir avec le monde extérieur qui devrait être nommé Get [Nom de la propriété], Set [Nom de la propriété].

Si vous le configurez conformément à la convention, WPF reconnaîtra que les deux sont connectés et devrait vous permettre d'utiliser la propriété comme prévu.

+0

Ha! Je pensais que je l'avais enregistré correctement. Je l'ai fait, mais j'ai accidentellement utilisé le mauvais nom dans les appels statiques GetXxx/SetXxx (j'avais GetXxxProperty/SetXxxProperty). Supervision de ma part. Marqué comme la réponse. – MarqueIV

+0

BTW, vous avez dit 'Vous pouvez également utiliser un format de propriété standard plutôt que la construction Set/Get.' Je ne pensais pas que vous pouviez le faire avec les propriétés attachées. Vous avez un exemple? – MarqueIV

+0

hmm, je pense que vous pouvez mais je n'ai pas trouvé d'exemples dans le code que j'ai à ma disposition. Certes, je n'utilise pas trop souvent les propriétés attachées, donc je m'en tiens à ce qui fonctionne. –