2

我正在使用自定义的默认按钮附加行为(如此处定义: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); }

...
}

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

4

1 回答 1

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被调用的子类DefaultButton)并使其与包含的 UserControl、Page 或 ChildWindow 合作以监视回车键。这将不必涉及与提供此功能没有直接关系的其他控制。

于 2010-08-10T20:47:44.310 回答