¿Cómo puedo cambiar el valor predeterminado de una propiedad de dependencia heredada?

¿Cómo puedo cambiar el valor predeterminado para una propiedad de dependencia heredada? En nuestro caso, hemos creado una subclase de Control que por defecto tiene suFocusable establecido en 'verdadero'. Queremos que nuestra subclase tenga el valor predeterminado de 'falso'.

Lo que hemos estado haciendo es simplemente establecerlo como 'falso' en el constructor, pero si alguien usa ClearValue, vuelve al valor predeterminado, no al valor establecido en el constructor.

Esto es lo que estoy haciendo actualmente para lograr esto (este es un control de prueba con un DP de 'Foo' por ejemplo). No soy fanático de lo 'nuevo' para ocultar la propiedad, aunque gracias aAddOwner, apunta a la misma instancia compartida, así que supongo que está bien. Parece que también hereda todos los demás valores de metadatos, así que eso es bueno. ¿Me preguntaba si esto es correcto?

public class TestControlBase : Control
{

    public static readonly DependencyProperty FooProperty = DependencyProperty.Register(
        "Foo",
        typeof(int),
        typeof(TestControlBase),
        new FrameworkPropertyMetadata(4) // Original default value
    );

    public int Foo
    {
        get { return (int)GetValue(FooProperty); }
        set { SetValue(FooProperty, value); }
    }

}

public class TestControl : TestControlBase
{

    public static readonly new DependencyProperty FooProperty = TestControlBase.FooProperty.AddOwner(
        typeof(TestControl),
        new FrameworkPropertyMetadata(67) // New default for this subclass
    );

}

Marc

ACTUALIZAR..

Creo que esto es aún mejor, ya que elimina la llamada 'nueva'. Aún puede acceder a través de FooProperty en la clase base, ya que utilizaAddOwner. Como tal, es técnicamente el mismo.

public class TestControl : TestControlBase
{
    // Note this is private
    private static readonly DependencyProperty AltFooProperty = TestControlBase.FooProperty.AddOwner(
        typeof(TestControl),
        new FrameworkPropertyMetadata(67) // New default for this subclass
    );

}

Respuestas a la pregunta(1)

Su respuesta a la pregunta