Je recherche un moyen de définir automatiquement la mise au point initiale sur un Silverlight UserControl à un contrôle spécifique. J'ai une page de connexion avec une zone de texte Nom d'utilisateur et je voudrais le faire de manière à ce que l'utilisateur passe à la page, leur curseur est déjà positionné et en attente dans la zone de texte Nom d'utilisateur au lieu d'avoir à les faire cliquer sur la case. p>
J'ai essayé d'appeler .Focus dans l'événement chargé de l'UserControl, mais sans succès. Quelqu'un sache comment faire cela? P>
5 Réponses :
J'ai fouillé une application SL3 rapide et celle-ci est EM> est difficile à mettre la mise au point initiale d'avoir la mise au point d'UserControl sur une commande dans le contrôle Silverlight.
Cependant, voir si cette solution résout ce problème pour vous. Vous devrez utiliser un petit JavaScript. P>
Voici le code de référence: p> une fois que votre contrôle SL a mis l'accent, vous pouvez définir davantage le Concentrez-vous sur un contrôle spécifique à l'aide de quelque chose comme: p> où uxlogin est défini dans xaml comme: p>
Cette solution semble fonctionner dans IE, mais je ne peux pas obtenir le contrôle de Silverlight pour se concentrer sur Firefox ou Chrome.
Je ne peux toujours pas faire fonctionner ce travail dans d'autres navigateurs, mais je vais avec cette solution, car la plupart des utilisateurs seront dans Ie de toute façon et que les autres devront simplement cliquer sur le contrôle Silverlight. Merci!
je t'en prie. J'ai eu beaucoup de problèmes avec Silverlight et FF - redimensionnant et simplement obtenir le contrôle à afficher. Dans un cas, j'ai finalement abandonné et avoir une solution pour IE et une autre pour FF. Pas le meilleur moyen, mais oh bien.
public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { HtmlPage.Plugin.Focus(); MyTextBox.Focus(); }
Si vous voulez le faire dans un prisme ou un moyen MVVM (éliminez le code du code-derrière), vous pouvez mettre en œuvre un comportement. Dans mon cas, je concentre la vue dans le champ Nom d'utilisateur si c'est vide et dans le mot de passe s'il est défini (d'où les 2 paramètres).
Mes implémentations: p>
public static class ControlTextFocusBehavior { public static readonly DependencyProperty FocusParameterProperty = DependencyProperty.RegisterAttached( "FocusParameter", typeof(string), typeof(ControlTextFocusBehavior), new PropertyMetadata(OnSetFocusParameterCallBack)); public static readonly DependencyProperty IsEmptyFocusedProperty = DependencyProperty.RegisterAttached( "IsEmptyFocused", typeof(bool), typeof(ControlTextFocusBehavior), new PropertyMetadata(true)); private static void OnSetFocusParameterCallBack(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { Control control = dependencyObject as Control; if (control != null) { control.Loaded += new RoutedEventHandler(control_Loaded); } } private static void control_Loaded(object sender, RoutedEventArgs e) { Control control = sender as Control; control.Loaded -= new RoutedEventHandler(control_Loaded); DependencyObject dependencyObject = sender as DependencyObject; if (dependencyObject != null) { bool isEmptyFocused = GetIsEmptyFocused(dependencyObject); bool isNullOrEmpty = string.IsNullOrEmpty(GetFocusParameter(dependencyObject)); if ((isEmptyFocused && isNullOrEmpty) || (!isEmptyFocused && !isNullOrEmpty)) { HtmlPage.Plugin.Focus(); control.Focus(); } } } public static void SetFocusParameter(DependencyObject dependencyObject, string parameter) { dependencyObject.SetValue(FocusParameterProperty, parameter); } public static string GetFocusParameter(DependencyObject dependencyObject) { return dependencyObject.GetValue(FocusParameterProperty) as string; } public static void SetIsEmptyFocused(DependencyObject dependencyObject, bool parameter) { dependencyObject.SetValue(IsEmptyFocusedProperty, parameter); } public static bool GetIsEmptyFocused(DependencyObject dependencyObject) { return (bool)dependencyObject.GetValue(IsEmptyFocusedProperty); } }
Je viens de faire un test rapide et on dirait que cela résoudra le problème dans le navigateur! P>
Comment définir la mise au point sur la zone Textbox dans Silverlight 4 popup hors navigateur P>
Si vous voulez ce code:
fenêtre.onload = fonction () p>
{ document.getElementById('Xaml1').focus(); }