¿Cómo implemento un comportamiento adjunto de Blend / WPF que hace referencia a otro control como una propiedad?

StackOverflow https://stackoverflow.com//questions/12650492

Pregunta

Estoy tratando de implementar un comportamiento que funciona en un objeto, pero se ve afectado por un segundo objeto.

Como ejemplo, cambiará la apariencia del elemento marco en función de la distancia de otro elemento marco.

Sé lo suficiente sobre los comportamientos adjuntos para ser peligrosos, y definiría mi clase así:

 public class ChangeWithDistance : Behavior<FrameworkElement>

y en algún lugar del comportamiento. Necesitaría una propiedad de dependencia que apunte al nombre (?) del otro control.

¿Cuál es la clase que debería hacer mi propiedad de dependencia para que pueda tener este punto de comportamiento a otro control?

¿Especificaría el propDP como una cadena que representa el nombre del otro control?

o hay otra clase que debería usar que significa la etiqueta asociada con un control (ya sabe, que x: Nombre Business ..)

¿O debería estar señalando el PROPDP en un elemento marco como este?

    public static readonly DependencyProperty OtherControl =     
          DependencyProperty.Register("OtherControl", typeof(FrameworkElement)

¿O hago algo con vinculación?

¿Hay una mejor práctica de cómo señalar un comportamiento o realmente cualquier cosa que tenga una propiedad de dependencia en otro control?

¿Hay alguna manera de que se muestre así que un usuario que usa la mezcla puede seleccionar el otro control?

¿Fue útil?

Solución

Estoy teniendo buena suerte al declarar mi propiedad de dependencia como tal:

 public static readonly DependencyProperty OtherObjectProperty =
        DependencyProperty.Register("OtherObject", typeof (FrameworkElement), typeof (MyBehavior), new UIPropertyMetadata());

y luego en el XAML lo atan al otro objeto que estoy interesado como este:

  <Rectangle ....>
       <Interactivity:Interaction.Behaviors>
             <Controls:MyBehavior OtherObject="{Binding ElementName=TheOtherElementNameIWantToReference}" />
       </Interactivity:Interaction.Behaviors>
  </Rectangle>                   

Otros consejos

Eso es muchas preguntas en una.Lea las propiedades adjuntas: http://msdn.microsoft.com/en-us/library/ms749011.aspx

La respuesta corta es que necesita usar el método RegisterAttached, en lugar de Register.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top