.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
Sign In
Win Surprise Gifts!!!

Top 5 Contributors of the Month
Melody Anderson

Home >> Articles >> WPF >> Post New Resource Bookmark and Share   

 Subscribe to Articles

Dependency Property in XAML

Posted By:Dhananjay Kumar       Posted Date: December 23, 2009    Points: 25    Category: WPF    URL: http://www.dotnetspark.com  

Dependency Property in XAML

  1. WPF introduces a new type of property called Dependency Property. 
  2. This Property is backed by WPF property system. 
  3. It is used for animation; enable styling, automatic data binding and more. 
  4. It depends upon multiple providers for determining its value at any point of time.
  5. The biggest feature of Dependency Property is itâ?Ts built in ability to provide CHANGE NOTIFICATION. 
  6. Main motive behind adding Dependency Property is to enable rich functionality directly from declarative markup language. 
  7. The purpose of Dependency Property is to find value of property based on the value of other inputs.

The other input might be

  • Style Themes 
  • User Preferences 
  • Just in time property determination 
  • Animation etc.


There are 96 public properties of Button. Properties can be easily set in XAML without any procedural code. But without extra plumbing of Dependency Property, it would be hard for the simple action of setting properties to get the desired result without writing extra code.
The purpose of dependency properties is to provide a way to compute the value of a property based on the value of other inputs.
Backing Object Property with Dependency Property , allowing to have support for Data Binding, Animation, Default Value,  Styling etc.
Dependency Property supports Multiple Providers.  In order to get final value of Dependency Property, these five steps have been run by WPF.

Step 1:  Determine Base Value

The following provider set the base value for Dependency Property. They are here listed in order of their precedence (Highest to Lowest).

  1. Local Value 
  2. Style Triggers 
  3. Template Triggers 
  4. Style setters 
  5. Theme Style Triggers
  6. Theme Style Setters 
  7. Property Value Inheritance 
  8. Default value.

Step 2:  Evaluate

If the value from Step1 is an expression, then it is finally getting evaluated here.  WPF converts an expression into a concrete value.

Step 3: Apply Animation

If any animations are running they can either replace or alter the value of Dependency Property.

Step 4: Coerce

WPF takes final Property value and pass it to CorecevalueCallBack delegate. This is to check, whether any custom logic is running to set the value of Dependency Property. The callback is responsible for returning new value based on custom logic.

Step 5: Validate

Now final value is passed to ValidateValueCallBack delegate to check value is Valid or not.
Example of Dependency Property
Let, there is a requirement to

  1. Change Text color of Button with Mouse Hover. 
  2. When Mouse Enters, text color should be change to BLUE 
  3. When Mouse Leaves, text color changed back to BLACK.

So without special feature CHANGE NOTIFICATION of Dependency Property

Step 1:
Create XAML tag for Button with two events , like below
<Window x:Class="WpfApplication2.Window1"
   Title="Window1" Loaded="Window_Loaded"  Height="300" Width="300">
  <Button MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave"  Height="100" Width="100"> Testing Button Button>

Here Button_MouseEnter  and  Button_MouseLeave  is events.

Step 2:
Now there is need to write code at back end to handles these events. Code will look like as follows

void Button_MouseEnter(object sender, MouseEventArgs e)

  Button b = sender as Button;
  if (b != null)
  b.Foreground = Brushes.Blue;

  private void Button_MouseLeave(object sender, MouseEventArgs e)
  Button b = sender as Button;
  if (b != null)
  b.Background = Brushes.Black;


Now to achieve above task, XAML can be easily used with Dependency Property.

<Window x:Class="WpfApplication2.Window1"
  Title="Window1" Loaded="Window_Loaded"  Height="300" Width="300">
  <Button  Height="100" MinWidth="75" Margin="10">
  <Style TargetType="{x:Type Button}">
  <Trigger Property="IsMouseOver" Value="True">
  <Setter Property="Foreground" Value="Blue"/>

 Subscribe to Articles


Further Readings:


No response found. Be the first to respond this post

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend