cKNet cKNet - 20 days ago 5
C# Question

How to add Custom Properties to WPF User Control

I've my own User Control including a few buttons and etc.

I use this code to bring that UC to screen.

<AppUI:XXXX x:Name="ucStaticBtns" HorizontalAlignment="Left" Margin="484,0,0,0" VerticalAlignment="Top" Width="68" />


I've added two property like Property1 and Property2 to XXXX user control. And changed my code with

<AppUI:XXXX x:Name="ucStaticBtns" HorizontalAlignment="Left" Margin="484,0,0,0" VerticalAlignment="Top" Width="68" Property1="False" Property2="False"/>


When I add this 2 parameters to XAML page, system throws an exception like "The member 'Property1' is not recognized or is not accesiable"

Here is my UC code.

public partial class XXXX : UserControl
{
public event EventHandler CloseClicked;
public event EventHandler MinimizeClicked;
//public bool ShowMinimize { get; set; }
public static DependencyProperty Property1Property;
public static DependencyProperty Property2Property;
public XXXX()
{
InitializeComponent();
}

static XXXX()
{
Property1Property = DependencyProperty.Register("Property1", typeof(bool), typeof(XXXX));
Property2Property = DependencyProperty.Register("Property2", typeof(bool), typeof(XXXX));
}

public bool Property1
{
get { return (bool)base.GetValue(Property1Property); }
set { base.SetValue(Property1Property, value); }
}

public bool Property2
{
get { return (bool)base.GetValue(Property2Property); }
set { base.SetValue(Property2Property, value); }
}
}


Can you help me with doing that?
Thank you so much!

Answer

You can use this declaration for your DependencyProperties:

public bool Property1
{
    get { return ( bool ) GetValue( Property1Property ); }
    set { SetValue( Property1Property, value ); }
}

// Using a DependencyProperty as the backing store for Property1.  
// This enables animation, styling, binding, etc...
public static readonly DependencyProperty Property1Property 
    = DependencyProperty.Register( 
          "Property1", 
          typeof( bool ), 
          typeof( XXXX ), 
          new PropertyMetadata( false ) 
      );

This snippet can be found in Visual Studio if you type "propdp" and then Tab twice. You'll need to fill the DependencyProperty's type, the name of the DependencyProperty, the class that contains it and the default value for that DependencyProperty (in my example, I put false as default.