从代码绑定附加行为

时间:2010-08-09 14:16:31

标签: binding silverlight-3.0 attachedbehaviors

我正在使用自定义默认按钮附加行为(如此处所定义:Silverlight 4 Default Button Service)。

我能够在XAML中成功绑定它,但是在嵌套的用户控件中,以下代码中的代码不起作用:

public partial class MyNestedUserContol{

/// a DP for storing the name of the default button, used in the ElementName binding
public string DefaultButton {
    get { return (string)GetValue(DefaultButtonProperty); }
    set { SetValue(DefaultButtonProperty, value); }
}
public static readonly DependencyProperty DefaultButtonProperty =
    DependencyProperty.Register("DefaultButton", typeof(string), typeof(TeamReferenceFieldEditor), new PropertyMetadata(null));

...

private void CreateCustomControls(){
    ...
    TextBox tb = new TextBox();
    ...
    AddDefaultButtonBinding(tb);
    ...
}

private void AddDefaultButtonBinding(Control control) {
    Binding binding = new Binding();
    binding.ElementName = this.DefaultButton;
    control.SetBinding(DefaultButtonService.DefaultButtonProperty, binding); }

...
}

我应该如何在代码中为此创建绑定?
谢谢,
标记

1 个答案:

答案 0 :(得分:0)

最终,这将成为名称范围内的一个问题。分配给ElementName的值可能与TextBox所属的同一个名称范围中不存在。

您是否考虑过使用: -

 private void MainPage_Load(object sender, RoutedEventArgs e)
 {
   LayoutRoot.AddHandler(UIElement.KeyUpEvent, LayoutRoot_KeyUp, true)
 }

 private void LayoutRoot_Keyup(object sender, KeyEventArgs e)
 {
   if (e.Key == Key.Enter)
   {
     // invoke default operation here
   }
 }

我已经阅读了您的其他问题和博客文章。它似乎是一种难闻的气味,必须将奇怪的属性附加到各种控件,如文本框,以实现默认按钮,这最终与文本框无关。

在按钮上附加一个属性是一个更好的模式,该属性将被声明为默认值(或者创建一个名为Button的{​​{1}}子类)并且具有该属性使用包含UserControl,Page或ChildWindow的操作来监视回车键。然后,这不必涉及与提供此功能无直接关系的其他控件。