So, here I will just write one small and working example of dependency property, but this doesn't mean that I understand them :)

 

First create new project, and then to that solution add new user control, like on pictures:

Now add user control:

Now, go to "code behind", like on picture:

 

public partial class UserControl1 : UserControl
{
	public UserControl1()
	{
		InitializeComponent();
	}

	public static readonly DependencyProperty MyCustomProperty =
		DependencyProperty.Register("MyCustom", typeof (string), typeof (UserControl1),
			new FrameworkPropertyMetadata(MyCustomChanged));

	private static void MyCustomChanged(DependencyObject depobj, DependencyPropertyChangedEventArgs e)
	{
		
	}

	public string MyCustom
	{
		get { return GetValue(MyCustomProperty) as string; }
		set { SetValue(MyCustomProperty, value); }
	}
}

After that go to your main application (MainWindow.xaml), and add following line to your XAML: 

<myDependencyProperty:UserControl1 MyCustom="Test"  HorizontalAlignment="Left" Height="100" Margin="121,62,0,0" VerticalAlignment="Top" Width="100" x:Name="MyTestUserControl1"/>

So your XAML should look like: 

<Window x:Class="MyDependencyProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:myDependencyProperty="clr-namespace:MyDependencyProperty"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <myDependencyProperty:UserControl1 MyCustom="Test"  HorizontalAlignment="Left" Height="100" Margin="121,62,0,0" VerticalAlignment="Top" Width="100" x:Name="MyTestUserControl1"/>
    </Grid>
</Window>

Note MyCustom="Test" - this is our new property which is of type string...