Domanda

Sto usando un pulsante di default personalizzato comportamento allegato. (Così come definito qui: Silverlight 4 predefinito pulsante servizio )

Sono in grado di legare questo successo in XAML, ma in un controllo utente nidificato, nel codice dietro la seguente non funziona:

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

...
}

Come devo creare il legame di questo nel codice?
Grazie,
Mark

È stato utile?

Soluzione

In definitiva questo sarà un problema in namescopes. Il valore assegnato a ElementName probabilmente non esiste nella stessa NameScope che il TextBox appartiene.

Avete considerato semplicemente usando: -

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

Ho letto attraverso la vostra altra domanda e l'articolo di blog. Il suo sembra un cattivo odore di dover collegare strane proprietà ai vari controlli come una casella di testo per implementare un pulsante di default, che alla fine non ha nulla a che fare con la casella di testo.

Sarebbe un modello migliore per associare una proprietà sul pulsante che deve essere dichiarato il difetto (o per creare una sotto-classe di Button chiamato DefaultButton) e di avere che cooperano con la contenente UserControl, pagina o childWindow da guardare per il tasto Invio. Questo non sarebbe poi coinvolgere altri controlli non direttamente legate alla fornitura di questa funzionalità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top