Al tener {Binding ElementName=foo}
, buscará un árbol visual o lógico?Enlace ElementName. ¿Utiliza Visual Tree o Logical Tree
Of logical and visual trees in WPF | Data See, Data Do
Cuando me importa el árbol lógico?
Cuando se busca un nombre, como por ejemplo en {Binding ElementName = Foo}, la búsqueda camina hacia la estirpe buscando un alcance nombre, de nuevo justo como lo hace para propiedades heredables.
ElementName binding in Silverlight via Attached Behaviours
Para permitir esto, WPF proporciona ElementName y RelativeSource fijaciones, que le da un poderoso mecanismo para localizar otros elementos dentro de su árbol visual para unirse a
EDITAR:
Parece que el Árbol lógico utilizado para el enlace por ElementName
.
Argumento # 1.
De acuerdo con el artículo de MSDN FrameworkElement Class:
FrameworkElement extiende UIElement y agrega las siguientes capacidades:
- Soporte para el enlace de datos y referencias de recursos dinámicos: El soporte de nivel de propiedad para el enlace y los recursos de datos es implementado por la clase DependencyProperty y incorporado en el sistema de propiedad, pero la capacidad de resolver un valor miembro que se almacena como una expresión (el constructo programación que subyace ambas enlace de datos y dinámicos recursos) se implementa por FrameworkElement. Para obtener más información sobre , consulte Información general sobre enlaces de datos y descripción general de recursos.
Argumento # 2.
ElementName
puntos a x:Name
, por lo que este nombre se debe encontrar alguna forma. Hay un concepto NameScope.
Para la mayoría de los escenarios, los métodos expuestos en FindName FrameworkElement y FrameworkContentElement son más métodos apropiados para llamar a buscar de elementos por nombre.Las propiedades de Nombre expuestas por FrameworkElement y FrameworkContentElement son más propiedades apropiadas para usar para establecer el nombre inicial como atributos de marcado. y los métodos RegisterName expuestos en FrameworkElement y FrameworkContentElement es necesario para establecer un nombre en un NameScope específica (no hay NameScope miembro que puede hacer esto directamente, se debe establecer el NameScope actual primer utilizar RegisterName) .
Por otra parte, tampoco tienen Visual classFindName
método, ni aplicar INameScope.
Árbol lógico utilizado. Publicará detalles más tarde. – alex2k8