Pregunta

Estoy utilizando un comportamiento adjunto botón predeterminado personalizado. (Como se define aquí: Silverlight 4 Default Servicio Botón )

Soy capaz de enlazar esto con éxito en XAML, pero en un control de usuario anidado, en el código detrás de la siguiente no funciona:

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); }

...
}

¿Cómo debo crear el enlace para esto en código?
Gracias,
Marcos

¿Fue útil?

Solución

En última instancia esto va a ser un problema en namescopes. El valor asignado a ElementName probablemente no existe en el mismo NameScope que el cuadro de texto pertenece.

¿Ha considerado el simple uso: -

 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
   }
 }

He leído a través de su otra pregunta, y el artículo del blog. Su parece como un mal olor que tiene que adjuntar propiedades extrañas a diversos controles como un cuadro de texto para implementar un botón predeterminado, que en última instancia no tiene nada que ver con el cuadro de texto.

Sería un mejor patrón para fijar una propiedad en el botón que ha de ser declarado el valor por defecto (o para crear una subclase de Button llamada DefaultButton) y de tener que cooperar con la que contiene control de usuario, página o ChildWindow a los vigilantes a la tecla Intro. Esto no tendría que involucrar a otros controles que no están directamente relacionados con la entrega de esta funcionalidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top