Estoy intentando crear un proxy de propiedad de dependencia simple. Hice un control personalizado, es un selector de archivos, que está hecho de un cuadro de texto (nombre: "TextBox_FilePath"
) y un botón que muestra el cuadro de diálogo de abrir archivo.Crear un proxy para una propiedad de dependencia
Como estoy haciendo un control reutilizable me gustaría tener una propiedad "SelectedFilePath"
. Como la propiedad Text
parece ser perfecta para que mi control sea la propiedad "SelectedFilePath"
, me gustaría realizar un proxy de estas propiedades de dependencia.
El primer enfoque que hice fue:
public static readonly DependencyProperty SelectedFilePathProperty = TextBox.TextProperty;
public string SelectedFilePath
{
get { return (string) this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
que funcionó, pero THROWED una excepción cuando se trata de obligar a esa propiedad. Luego salí con:
public static readonly DependencyProperty SelectedFilePathProperty =
DependencyProperty.Register("SelectedFilePath", typeof (string), typeof (FilePicker), new PropertyMetadata(default(string)));
public string SelectedFilePath
{
get { return (string) this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
que funciona, pero no tengo ni idea de por qué ?! ¿Dónde especifiqué que quería la propiedad text
del cuadro de texto?
¿Qué me hace falta simplemente para representar por proxy esa propiedad de dependencia?
EDIT: La solución con AddOwner
no funciona demasiado, se produce una Excetion diciendo "sólo puede ser aplicado en una propiedad de dependencia de unión". Código:
public static readonly DependencyProperty SelectedFilePathProperty =
TextBox.TextProperty.AddOwner(typeof(FilePicker));
public string SelectedFilePath
{
get { return (string)this.TextBox_FilePath.GetValue(SelectedFilePathProperty); }
set { this.TextBox_FilePath.SetValue(SelectedFilePathProperty, value); }
}
¿Qué no entiendo?
Edit2: para todos los demás que tienen problemas para entender la respuesta, he hecho a little graphic
favor ver mi edición :) – GameScripting
* * Como ya he dicho, está registrado con el nombre de "texto", se puede, por tanto, sólo se unen a una propiedad llamada 'Text', la propiedad' SelectedFilePath' que creó es solo un contenedor para su código imperativo, las encuadernaciones nunca lo usan. Registre su propiedad si quiere un nombre diferente. –
¿Puede ser tan amable y dar un ejemplo o dar alguna referencia sobre cómo hacer eso? – GameScripting