V3045. WPF: the names of the property registered for DependencyProperty, and of the property used to access it, do not correspond with each other.


The analyzer detected a possible error related to dependency property registration. A wrong name was defined for the property used to access the registered dependency property.

class A : DependencyObject
{
public static readonly DependencyProperty ColumnRulerPenProperty =
  DependencyProperty.Register("ColumnRulerBrush", ....);

public DateTime ColumnRulerPen {
    get { return (DateTime)GetValue(ColumnRulerPenProperty); }
    set { SetValue(ColumnRulerPenProperty, value); }
}
....

Because of renaming, a wrong name was defined for the property used for writing into the ColumnRulerPenProperty dependency property. In the example above, taken from a real application, the name ColumnRulerPen is used instead of ColumnRulerBrush (as suggested by the Register function's parameters).

Implementing dependency properties in a way like that may cause problems because, when accessing the ColumnRulerPen property from the XAML markup for the first time, the value will be successfully read, but it won't update as this property changes.

A correct property definition in the code above should look like this:

public DateTime ColumnRulerBrush {
    get { return (DateTime)GetValue(CurrentTimeProperty); }
    set { SetValue(CurrentTimeProperty, value); }
} 

In real programs, the following version of incorrect dependency property name definition is also common:

public static readonly DependencyProperty WedgeAngleProperty =
  DependencyProperty.Register("WedgeAngleProperty", ....);

It is supposed that the word "Property" will be missing from the string literal:

public static readonly DependencyProperty WedgeAngleProperty =
  DependencyProperty.Register("WedgeAngle", ....);

Bugs Found

Checked Projects
343
Collected Errors
12 850