Поведение привязанного приложения из кода - PullRequest
2 голосов
/ 09 августа 2010

Я использую пользовательское поведение по умолчанию для прикрепленной кнопки (как определено здесь: 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); }

...
}

Как мне создать привязку для этого в коде?
Спасибо,
Mark

1 Ответ

0 голосов
/ 11 августа 2010

В конечном итоге это будет проблемой для именных областей. Значение, присвоенное 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, чтобы наблюдать за клавишей ввода. В этом случае не потребуется задействовать другие элементы управления, не связанные напрямую с предоставлением этой функциональности.

...