Question

J'utilise un bouton par défaut personnalisé comportement attaché. (Tel que défini ici: Silverlight 4 Bouton de service par défaut de )

Je suis en mesure de lier ce succès en XAML, mais dans un contrôle utilisateur imbriqué, dans le code derrière le suivant ne fonctionne pas:

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

...
}

Comment dois-je créer la liaison pour cela dans le code
Merci,
Mark

Était-ce utile?

La solution

En fin de compte, ce sera un problème dans namescopes. La valeur attribuée à ElementName n'existe probablement pas dans la même NameScope que la zone de texte appartient.

Avez-vous envisagé simplement en utilisant: -

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

Je l'ai lu dans votre autre question et l'article de blog. Son semble être une mauvaise odeur d'avoir à attacher des propriétés étranges à différents contrôles comme une zone de texte pour mettre en œuvre un bouton par défaut, ce qui a finalement rien à voir avec la zone de texte.

Il serait un meilleur modèle pour attacher une propriété sur le bouton qui doit être déclarée la valeur par défaut (ou de créer une sous-classe de Button appelé DefaultButton) et d'avoir qui coopèrent avec les contenant UserControl, la page ou ChildWindow à surveiller la touche entrée. Cela aurait donc pas d'impliquer d'autres contrôles ne sont pas directement liées à la prestation de cette fonctionnalité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top