Si entiendo bien su pregunta tiene una FrameworkElement
que expone una llanura antigua propiedad común que no está respaldada como una Propiedad de dependencia. Sin embargo, le gustaría establecerlo como el objetivo de un enlace.
Primero, es poco probable que funcione el enlace de TwoWay al trabajo, y en la mayoría de los casos es imposible. Sin embargo, si solo desea un enlace obligatorio, puede crear una propiedad adjunta como sustituto de la propiedad real.
Imaginemos que tengo un elemento de estructura StatusDisplay
que tiene una propiedad de cadena Message
que por alguna razón tonta no admite Message
como propiedad de dependencia.
public static StatusDisplaySurrogates
{
public static string GetMessage(StatusDisplay element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
return element.GetValue(MessageProperty) as string;
}
public static void SetMessage(StatusDisplay element, string value)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
element.SetValue(MessageProperty, value);
}
public static readonly DependencyProperty MessageProperty =
DependencyProperty.RegisterAttached(
"Message",
typeof(string),
typeof(StatusDisplay),
new PropertyMetadata(null, OnMessagePropertyChanged));
private static void OnMessagePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
StatusDisplay source = d as StatusDisplay;
source.Message = e.NewValue as String;
}
}
Por supuesto, si el control StatusDisplay
tiene su propiedad Message
modificado directamente por la razón que ya no coincidirá con el estado de este sustituto. Aún así, eso puede no ser importante para tus propósitos.