J'espérais vraiment qu'il y aurait une de la solution de la boîte pour un tel cas d'utilisation courante dans Silverlight 4, mais malheureusement, je ne pense pas qu'il y ait.
Il existe une autre implémentation de bouton par défaut par Patrick Cauldwell. Il utilise également les propriétés attachées.
J'ai testé cela dans une application SL 4 et cela semble faire l'affaire.
Vous pouvez trouver le code ici: http://www.cauldwell.net/patrick/blog/DefaultButtonSemanticsInSilverlightRevisited.aspx
Edit: J'ai peaufiné le code de David Justice pour le faire fonctionner pour Silverlight 4. Je viens de changer le GetDefaultButton et SetDefaultButton prendre et retour un DefaultButtonService. L'utilisation est la même que celle indiquée sur son site Web. Cela devrait fonctionner pour vous:
Edit2: Ajouté XAML exemple pour plus de clarté.
public class DefaultButtonService
{
public static DependencyProperty DefaultButtonProperty =
DependencyProperty.RegisterAttached("DefaultButton",
typeof(Button),
typeof(DefaultButtonService),
new PropertyMetadata(null, DefaultButtonChanged));
private static void DefaultButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uiElement = d as UIElement;
var button = e.NewValue as Button;
if (uiElement != null && button != null)
{
uiElement.KeyUp += (sender, arg) =>
{
if (arg.Key == Key.Enter)
{
var peer = new ButtonAutomationPeer(button);
var invokeProv =
peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
if (invokeProv != null)
invokeProv.Invoke();
}
};
}
}
public static DefaultButtonService GetDefaultButton(UIElement obj)
{
return (DefaultButtonService)obj.GetValue(DefaultButtonProperty);
}
public static void SetDefaultButton(DependencyObject obj, DefaultButtonService button)
{
obj.SetValue(DefaultButtonProperty, button);
}
}
Comment appliquer en XAML:
<StackPanel>
<TextBox DinnerConfig:DefaultButtonService.DefaultButton="{Binding ElementName=MyButton}"
Text="Press Enter" />
<Button x:Name="MyButton"
Content="Click me" />
</StackPanel>
Merci. Les approches de David et Patrick sont à peu près les mêmes - même si je suis content de voir que le problème n'est pas avec SL4, un scénario particulier doit être lié à notre application. Merci d'avoir pris le temps de répondre +1 –
Les méthodes "Get/SetDefaultButton" ne devraient-elles pas renvoyer/prendre un bouton au lieu d'un DefaultButtonService? Le type en question est le type de la valeur réelle récupérée/stockée dans la propriété. J'ai fait ce changement moi-même et ça marche maintenant. – Trinition
Oui, Trinition, vous avez raison. Si vous voulez ajouter un exemple, je voterai votre réponse comme correcte. Vous pouvez copier mon exemple ajouté ci-dessous si vous le souhaitez. –