32 votes

Comment donner un focus à Textbox dans Silverlight?

Dans mon application Silverlight, je n'arrive pas à attirer l'attention sur un contrôle de zone de texte. Sur la recommandation de différents postes, j'ai mis le IsTabStop True à la propriété, et je suis en utilisant la zone de texte.Focus(). Si le UserControl_Loaded événement est déclenché, le contrôle de zone de texte n'est pas d'obtenir le focus. J'ai inclus mon code très simple ci-dessous. Ce qui me manque? Merci.

Page.xaml

<UserControl x:Class="TextboxFocusTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Loaded="UserControl_Loaded" 
    Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">        
        <StackPanel Width="150" VerticalAlignment="Center">            
            <TextBox x:Name="RegularTextBox" IsTabStop="True" />    
        </StackPanel>        
    </Grid>
</UserControl>

Page.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace PasswordTextboxTest
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            RegularTextBox.Focus();
        }
    }
}

41voto

Jim B-G Points 449

J'ai trouvé ceci sur silverlight.net et j'ai pu le faire fonctionner en ajoutant un appel à System.Windows.Browser.HtmlPage.Plugin.Focus () avant d'appeler RegularTextBox.Focus ():

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
   {        
      System.Windows.Browser.HtmlPage.Plugin.Focus();
      RegularTextBox.Focus();
   }
 

23voto

rekle Points 1138
 Plugin.Focus(); 
 

n'a pas fonctionné pour moi.

Appel

  Dispatcher.BeginInvoke(() => { tbNewText.Focus();});
 

Depuis l'événement Load a fonctionné.

10voto

om. Points 101

merci Santiago Palladino Dispatcher a parfaitement travaillé pour moi. Ce que je fais c'est:

this.Focus (); then Dispatcher.BeginInvoke (() => {tbNewText.Focus ();});

3voto

Luca Points 31

J'ai résolu en mettant dans le constructeur de contrôle:

 this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };
 

2voto

Bill Reiss Points 2372

Êtes-vous sûr de ne pas vraiment vous concentrer? Il y a un bug connu dans la bêta 2 où vous aurez le focus et pourrez taper mais vous n'obtiendrez pas le curseur ou la bordure. La solution consiste à appeler UpdateLayout () dans la zone de texte juste avant d'appeler Focus ().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X