Silverlight lets you create a property in an object (such as a rectangle) that derives from an ancestor element (such as a canvas). That is why we can write
<Rectangle Canvas.Top="10" />
Canvas.Top is a property of the Canvas, the ancestor element in the object tree. Tim Heuer, one of the smarter folks I know, calls this a Dependency Property. I call this an attached Property. So I did a little spelunking to find out which is right, and here's what I found.
“Attached properties” are defined in this Quick Start as follows:
Getting or Setting Attached Properties
An attached property is a XAML language concept whereby elements can be assigned attributes for a property, even though that property is not present in the members list of the code type that backs the element.
Ahhhh, the sweet taste of vindication. I should have stopped there, but then I found this blog (admittedly about WPF, but I think it applies), which shows Attached Properties as a subset of Dependency Properties:
Dependency properties are used when the resolution of a property’s value is based on other properties or runtime settings (such as operating system settings). Here are some important features of dependency properties:
- Value resolution – DPs are used to form a system which can determine the actual property value based on various runtime information. The resolution process has an order of precedence it assigns to various environmental contexts in which the property might exist. For example, if the DP is being modified by an animation then the value supplied by the animation is the resolved value, but if it is not animated, then the value is derived from elsewhere.
- Self-contained validation – DPs can have custom callback methods execute when the property value has changed. These callbacks can validate the new value or coerce the new property value into something acceptable, according to the semantics of the property.
- Default values – DPs provide a consistent mechanism for associating a default value with a property. A DP’s default value has the lowest precedence in the value resolution process, meaning that if there is no other way to determine the property value, then the default value will be used.
- Property meta-data – The property system knows how a DP should behave based on meta-data supplied at the time the property is registered with the system. Subclasses can tweak a DP by overriding the property’s meta-data, instead of completely re-implementing the property itself. It is interesting to note that this meta-data is not stored in attributes, partly because the performance impact associated with using reflection to manipulate the meta-data was unacceptable.
- XAML friendly – Just like normal properties, DPs can be set in XAML.
- Value inheritance – Any DP can be given the ability to inherit its value from the property setting on an ancestor element, in the logical tree. This provides similar functionality to the ambient properties used in Windows Forms. Value inheritance is useful in many situations, such as propagating a data source down the element tree, font settings, flow direction (right-to-left) settings, etc.
- Attached properties – A form of dependency property which allows a child element to store a value associated with a property defined on an ancestor element.
My conclusion, after all of 10 minutes of research…. When you write:
<Rectangle Canvas.Top=”15”>
It is correct to call it either an Attached property or a Dependency Property, in the sense that if All Throgs are Thrains and this is a Throg then it is also a Thrain.
I like reading aan article that will make people think.
Also, thanks for allowing for me to comment!
I’m truly enjoying the design and layout of your blog.
It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often.
Did you hire out a designer to create your theme? Fantastic work!
Excellent blog post. I absolutely appreciate this website.
Keep it up!
Hi there! Someone in my Facebook group shared this site with us so I came to take a look.
I’m definitely loving the information. I’m bookmarking and
will be tweeting this to my followers! Fantastic blog and outstanding
style and design.
I like the valuable info you provide in your articles.
I’ll bookmark your blog and check again here frequently. I’m
quite sure I’ll learn lots of new stuff right here!
Best of luck for the next!
This site definitely has all the information I wanted about this subject and didn’t know
who to ask.
whoah this weblog is wonderful i love studying your
posts. Keep up the good work! You already know, a lot of individuals are looking round for this info, you could aid them greatly.
My web site :: IT Support Services (Lillian)
Hi, I do think this is an excellent web site. I stumbledupon it 😉
I’m going to come back once again since i have book-marked it.
Money and freedom is the best way to change, may you be rich
and continue to help other people.
Visit my website :: Managed IT Services (Earnestine)
Hey! I’m at work surfing around your blog from my new iphone 4!
Just wanted to say I love reading through your blog and look forward to all
your posts! Keep up the excellent work!
Look into my web-site: Rugged Tablets (shehzadakbar.com)
Hello there! I just want to give you a huge thumbs up
for your great info you have here on this post. I’ll be coming back to your web
site for more soon.
My site HomePage (http://www5e.biglobe.ne.jp/~hot-oita/cgi-bin/yybbssoo/yybbs.cgi)
If you would like to take a good deal from this piece of writing then you have to apply such techniques to your won
webpage.
my page; search engine optimization
Cat behaviour issues: Do you want a solution watch our new blog
On the second thought, dependency prop. has to be declared in supporting code behind and use mechanism to register itself in property system. While attached allows component to hook itself to parent component in visual tree and there are no need for supporting code
On the second thought, dependency prop. has to be declared in supporting code behind and use mechanism to register itself in property system. While attached allows component to hook itself to parent component in visual tree and there are no need for supporting code
The clearness of explanation is outstanding.
Simply wish to say your article is as surprising. The clearness to your publish is just spectacular and that i can think you’re an expert in this subject. Well together with your permission let me to clutch your RSS feed to keep updated with approaching post. Thanks 1,000,000 and please carry on the enjoyable work.
Muchos Gracias in your weblog post.Thanks Again. Actually Great.
Just to let you know that your link to the Silverlight Quick Start (http://www.silverlight.net/QuickStarts/BuildUi/CallJavascript.aspx) leads to a “The page you are looking for is not available…” message.