Frage

In meinem Silverlight-Anwendung, kann ich nicht den Fokus auf eine TextBox Kontrolle zu bringen scheinen. Auf Empfehlung der verschiedenen Beiträge, habe ich die IsTabStop Eigenschaft auf True gesetzt und ich bin mit TextBox.Focus (). Obwohl das UserControl_Loaded Ereignis feuert, wird das TextBox-Steuerelement nicht den Fokus zu bekommen. Ich habe meine sehr einfachen Code unten enthalten. Was vermisse ich? Danke.

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();
        }
    }
}
War es hilfreich?

Lösung

Ich fand dies auf silverlight.net, und war in der Lage, es zu bekommen, für mich zu arbeiten, indem sie einen Aufruf an System.Windows.Browser.HtmlPage.Plugin.Focus Hinzufügen () vor dem Aufruf RegularTextBox.Focus ():

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

Andere Tipps

Plugin.Focus(); 

nicht für mich arbeiten.

Der Aufruf

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

Aus dem Load-Ereignisse gearbeitet.

Dank Santiago Palla Dispatcher perfekt für mich gearbeitet. Was ich tue, ist:

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

Ich löste im Steuer Konstruktor setzen:

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

Sind Sie sicher, dass Sie nicht wirklich Fokus zu bekommen? Es gibt einen bekannten Bug in Beta 2, wo Sie Fokus erhalten werden und in der Lage zu geben, aber sie werden nicht die Einfügemarke oder die Grenze bekommen. Die Abhilfe ist UpdateLayout () auf der Textbox direkt aufzurufen, bevor Sie anrufen Focus ().

Ich würde versuchen, eine DispatcherTimer auf dem UserLoaded Ereignis hinzufügen, die die Focus-Methode ein paar Millisekunden, nachdem die gesamte Steuerung ausführt, geladen; vielleicht das Problem ist da.

ich auch nennen benötigt

Deployment.Current.Dispatcher.BeginInvoke (() => myTextbox.Focus ());

Interessanterweise dieser Aufruf innerhalb eines Event-Handlers geschieht, wenn ich auf einem TextBlock- Mausklick, die TextBlock- kollabieren und die TextBox sichtbar machen. Wenn ich es nicht von einem Dispatcher.BeginInvoke folgen wird es nicht scharf eingestellt werden.

-Mike

Sie Code, um den Fokus zu setzen, ist richtig, denn wenn Sie auf eine Schaltfläche hinzufügen, die den gleichen Code nennt es perfekt funktioniert:

<StackPanel Width="150" VerticalAlignment="Center">
    <TextBox x:Name="RegularTextBox" IsTabStop="True" />
    <Button Click="UserControl_Loaded">
        <TextBlock Text="Test"/>
    </Button>
</StackPanel>

So gehe davon aus mir das etwas ist, mit Focus () erfordern eine Art von Interaktion mit dem Benutzer zu tun. Ich konnte es nicht mit einem Mousemove-Ereignisse auf dem Usercontrol zu arbeiten, aber ein Ereignis KeyDown setze die Fokus Arbeiten einstellen (auch wenn die Vorlage nicht auf die fokussierte Vorlage nicht aktualisiert).

Width="400" Height="300" Loaded="UserControl_Loaded" KeyDown="UserControl_KeyDown">

Es scheint ein Fehler zu mir ....

Für Out-of-Browser-Apps der System.Windows.Browser.HtmlPage.Plugin.Focus(); existieren nicht.

Siehe meine Frage hier für andere Ideen.

Es funktioniert für mich in SL4 und IE7 und Firefox 3.6.12

Schluss fehlt „Stück“, das Fokus (für mich) zu arbeiten gemacht einstellen .TabIndex Eigenschaft

        System.Windows.Browser.HtmlPage.Plugin.Focus();
        txtUserName.IsTabStop = true;
        txtPassword.IsTabStop = true;

        if (txtUserName.Text.Trim().Length != 0)
        {
            txtPassword.UpdateLayout();
            txtPassword.Focus();
            txtPassword.TabIndex = 0;
        }
        else
        {
            txtUserName.UpdateLayout();
            txtUserName.Focus();
            txtUserName.TabIndex = 0;
        }

Ihr Profil ist nicht gut genug auf @ Jim BG beantworten aber was für mich gearbeitet wurde hinzufügen ein Handler für das Loaded-Ereignis auf dem RichTextBox und innerhalb dieses Handler hinzufügen

System.Windows.Browser.HtmlPage.Plugin.Focus();
<YourTextBox>.UpdateLayout()
<YourTextBox>.Focus();

Doch es funktionierte nur auf IE und FF. Um es auf Chrome und Safari funktioniert, scrollen Sie nach unten von diese

ich eine Sache vergessen ... Ich habe nicht einen Weg zu zwingen, den Fokus auf dem Silverlight-Anwendung auf der Seite zuverlässig (es funktioniert bei einigen Browsern und nicht auf andere) gefunden.

So kann es sein, dass die Silverlight-Anwendung selbst nicht Fokus hat. Ich Trick in der Regel die Benutzer in einem Knopf oder etwas ähnliches zu klicken, bevor ich die Tastatureingabe beginnen erwartet, um sicherzustellen, dass die Silverlight-Anwendung des Fokus hat.

Ich lief auch in dieses Problem, aber es war von einem anderen Fall entstanden als das, was hier bereits beantwortet wurde.

Wenn Sie eine BusyIndicator Kontrolle haben wird, überhaupt während Ihrer Ansicht ein- und ausgeblendet werden Kontrollen nicht erhalten konzentrieren, wenn Sie Linien wie

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

im Load-Ereignisse.

Stattdessen müssen Sie diese Zeile Code nennen nach Ihre BusyIndicator Anzeige auf false gesetzt wurde.

Ich habe eine ähnliche Frage hier sowie als Lösung für dieses Szenario.

Tat eine lästige beheviour. Ich fand eine einfache, klare Lösung:

(VB-Code)

    Me.Focus()
    Me.UpdateLayout()

    Me.tbx_user_num.Focus()
    Me.tbx_user_num.UpdateLayout()

Jedes Element hier ist wesentlich, da pro meinem Projekt mindestens (VB2010 SL4 OutOfBrowser).

Kredit an: http: // www .dotnetspark.com / kb / 1792-set-Fokus-to-Textbox-Silverlight-3.aspx

Keine der oben genannten Antworten für mich gearbeitet direkt, was ich tat, ist, dass ich dieses Ereignis hinzugefügt in der Mainpage () Konstruktor:

this.Loaded += new RoutedEventHandler(MainPage_Loaded);

Und behandelt es wie folgt:

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

Meine Silverlight-Version ist 4.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top