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