我正在使用自定义默认按钮附加行为(如此处所定义: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); }
...
}
我应该如何在代码中为此创建绑定?
谢谢,
标记
答案 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的操作来监视回车键。然后,这不必涉及与提供此功能无直接关系的其他控件。