如何实现将另一个控件作为属性引用的blend / wpf附加行为?

时间:2012-09-29 06:26:29

标签: c# wpf xaml expression-blend attachedbehaviors

我正在尝试实现一个对象有效的行为,但受第二个对象的影响。

作为示例,它将根据另一个框架元素的距离更改框架元素的外观。

我已经足够了解附加的行为是危险的,我会像这样定义我的类:

 public class ChangeWithDistance : Behavior<FrameworkElement>

在行为的某个地方我需要一个依赖属性,它指向另一个控件的名称(?)。

我应该创建依赖属性的类是什么,以便我可以将此行为指向另一个控件?

我会将propdp指定为表示其他控件名称的字符串吗?

或者是否有另一个我应该使用的类表示与控件关联的标记(您知道,x:名称业务..)

或者,propdp应该指向这样的框架元素吗?

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

或者我是否会对绑定做些什么?

是否有一种最佳实践,如何在另一个控件上指向一个行为或任何具有依赖属性的东西?

有没有办法让它显示,以便使用混合的用户可以选择其他控件?

2 个答案:

答案 0 :(得分:2)

我很幸运地宣布我的依赖属性:

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

然后在XAML中将它绑定到我感兴趣的其他对象:

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

答案 1 :(得分:0)

这是一个很多问题。阅读附加属性:http://msdn.microsoft.com/en-us/library/ms749011.aspx

简短的回答是您需要使用RegisterAttached方法,而不是Register