views:

363

answers:

1

I'm a bit in a mess with how to set a Dependency Property for Custom Control.

I created Custom Control, so it derives from Control class.

public class CustControl : Control 
    {
      static CustControl()
       {
         DefaultStyleKeyProperty.OverrideMetadata(typeof(CustControl), new FrameworkPropertyMetadata(typeof(CustControl)));       
       }        
    }

In order to set Dependency Property I have to register it inside a class which must be derived from DependencyObject. So it should be another class:

class CustClass : DependencyObject
{
    public readonly static DependencyProperty MyFirstProperty = DependencyProperty.Register("MyFirst", typeof(string), typeof(CustControl), new PropertyMetadata(""));

    public string MyFirst
    {
        get { return (string)GetValue(MyFirstProperty); }
        set { SetValue(MyFirstProperty, value); }
    }
}

How now I could set MyFirst property as dependency property for CustControl?

+1  A: 

In order to set Dependency Property I have to register it inside a class which must be derived from DependencyObject. So it should be another class:

No, it shouldn't. Control already derives from DependencyObject. Since inheritance is transitive, this makes CustControl a subtype of DependencyObject as well. Just put it all into CustControl:

public class CustControl : Control 
    {
      static CustControl()
       {
         DefaultStyleKeyProperty.OverrideMetadata(typeof(CustControl), new FrameworkPropertyMetadata(typeof(CustControl)));       
       }        

    public readonly static DependencyProperty MyFirstProperty = DependencyProperty.Register("MyFirst", typeof(string), typeof(CustControl), new PropertyMetadata(""));

    public string MyFirst
    {
        get { return (string)GetValue(MyFirstProperty); }
        set { SetValue(MyFirstProperty, value); }
    }
}
Heinzi
Yes, it works! Thanks a lot!
rem