Próbuję zaimplementować zachowanie, które działa na obiekcie, ale ma wpływ na drugi obiekt.

Na przykład zmieni wygląd elementu ramy na podstawie odległości innego elementu ramy.

Wiem wystarczająco dużo o dołączonych zachowaniach, aby były niebezpieczne, a swoją klasę określiłbym w ten sposób:

 public class ChangeWithDistance : Behavior<FrameworkElement>

A gdzieś w zachowaniu potrzebowałbym właściwości zależności, która wskazywałaby na nazwę (?) innej kontrolki.

Jaką klasę powinienem ustawić we właściwości zależności, aby to zachowanie wskazywało na inną kontrolkę?

Czy określiłbym propdp jako ciąg, który reprezentuje nazwę innej kontrolki?

A może jest inna klasa, której powinienem użyć, która oznacza tag powiązany z kontrolką (wiesz, że x:Name business...)

A może propdp powinien wskazywać na taki element frameworka?

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

A może robię coś z wiązaniem?

Czy istnieje najlepsza praktyka, jak wskazać zachowanie lub naprawdę wszystko, co ma właściwość zależności na innej kontrolce?

Czy istnieje sposób, aby to się pojawiło, aby użytkownik korzystający z mieszanki mógł wybrać inną kontrolkę?

1
Jeremy White 29 wrzesień 2012, 10:26

2 odpowiedzi

Najlepsza odpowiedź

Mam szczęście, że deklaruję moją właściwość zależności jako taką:

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

A następnie w XAML wiążącym go z innym obiektem jestem zainteresowany w ten sposób:

  <Rectangle ....>
       <Interactivity:Interaction.Behaviors>
             <Controls:MyBehavior OtherObject="{Binding ElementName=TheOtherElementNameIWantToReference}" />
       </Interactivity:Interaction.Behaviors>
  </Rectangle>                   
3
Jeremy White 30 wrzesień 2012, 09:45

To dużo pytań w jednym. Przeczytaj o załączonych właściwościach: http://msdn.microsoft.com/en-us /biblioteka/ms749011.aspx

Krótka odpowiedź brzmi, że musisz użyć metody RegisterAttached zamiast Register.

0
phoog 29 wrzesień 2012, 11:40